Rehber JAVA Minecraft Eklenti Özel Yapılandırma Dosyaları Oluşturma & Okuma & Yazdırma | Minecraft Eklenti Rehberi

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

HaktanOzkan

Demir Cevheri Gibiyim
Katılım
22 Temmuz 2014
Mesajlar
206
Elmaslar
116
Puan
13.825
Minecraft
HaktanOzkan

Discord:

hktanozkan

Merhaba bu konuda java eklentiniz için özel config (yapılandırma) dosyalarınızı nasıl oluşturabileceğinizi, nasıl okuyacağınızı ve nasıl yazdıracağınızı göstereceğim.

Özel yapılandırma dosyası eklentiniz için config.yml gibi fakat karışıklığı önleyebilmek ve eklentinin kullanımını kolaylaştırmak adına oluşturabileceğiniz dosyalardır. Çoğu eklentide görmüşsünüzdür config.yml dosyasının yanında ek olarak örneğin message.yml gibi dosyalarda olur. İşte bunlar özel yapılandırılmış dosyalardır (Custom Config).

Fazla uzatmadan konuya geçelim.

Kullandığım IDE : Eclipse IDE for Java Developers
Java Sürümü : JavaSE-1.8
Minecraft Sürümü : 1.8


Öncelikle projemizi oluşturalım.

dosyaolusturma.png


Spigot veya bukkit dosyanızı import ettikten sonra bir paket oluşturalım.

package.png


Önerim eklentiniz içinde yapılandırma dosyası için ayrı bir paket oluşturmanızdır. Bu sayede her şeyin yeri belli olur ve hem eklenti gelişiminde size yardımcı olur hemde karışıklığı engellemiş olursunuz.

Paket oluşturduktan sonra bir class dosyası oluşturalım.
class.png

Evet bundan sonrası asıl yapmak istediğimiz şeye geldik.
Java:
public class CustomFile {
    
    private static File file;
    private static FileConfiguration customfile;
    
    public static void setup() {
        file = new File(Bukkit.getServer().getPluginManager().getPlugin("CustomConfig").getDataFolder(), "customconfig.yml");
        
        if(!file.exists()) {
            try {
                file.createNewFile();
            } catch(IOException e) {
                //d
            }
        }
        customfile = YamlConfiguration.loadConfiguration(file);
    }
    
    public static FileConfiguration get() {
        return customfile;
    }
    
    public static void save() {
        try {
            customfile.save(file);
        } catch (IOException e) {
            System.out.println("Kaydedilmedi !");
        }
    }
    
    public static void reload() {
        customfile = YamlConfiguration.loadConfiguration(file);
    }

}


Yukarıdaki kodu direkt olarak class dosyanızın içerisine yapıştırın.

Şimdi size özel gerekli düzenlemeleri ve kod açıklamasını yapalım.
Java:
file = new File(Bukkit.getServer().getPluginManager().getPlugin("CustomConfig").getDataFolder(), "customconfig.yml");

Evet bu kısımdaki "CustomConfig" yazan kısım sizin eklentinizin adı olmalı. Bu kod eklentinizi arar ve dosyanızın içine customconfig.yml isimli bir dosya oluşturmasını sağlar.
Java:
public static FileConfiguration get() {
        return customfile;
    }

Bu kod sizin customconfig.yml dosyanıza ulaşmanızı dosya içerisine bir şeyler yazdırmanızı veya dosya içerisinden bir şeyler okumanızı sağlar.
Java:
public static void save() {
        try {
            customfile.save(file);
        } catch (IOException e) {
            System.out.println("Kaydedilmedi !");
        }
    }

customconfig.yml dosyanızı kaydetmenizi sağlar.
Java:
public static void reload() {
        customfile = YamlConfiguration.loadConfiguration(file);
    }

Çoğunuzundan anlıyacağı üzere customconfig.yml dosyanızı yeniden yapılandırır.​

Şimdi geriye sadece bunu eklenti içerisinde kullanmak kaldı.
Hemen o işede geçelim.
Ben "Main" adında bir class dosyası oluşturdum ve içerisine başlatıldığında çalıştırmasını istediğim için "onEnable" etiketini kullandım.
Java:
public class Main extends JavaPlugin{
    
    public void onEnable() {
        //customconfig.yml dosyasını oluşturmak için kullanacağınız kod.
        CustomFile.setup();
        
        //customconfig.yml dosyasının içerisine istediğiniz text'i yazdırmak için kullanacağınız kod.
        CustomFile.get().addDefault("Deneme", true);
        CustomFile.get().addDefault("Deneme1", "Deneme1");
        CustomFile.get().addDefault("Oyuncu", "HaktanOzkan");
        
        //customconfig.yml dosyasını kaydetmek için kullanacağınız kod.
        CustomFile.get().options().copyDefaults(true);
        CustomFile.save();
        
        //customconfig.yml dosyasınını yeniden yapılandırmak için kullanacağınız kod.
        CustomFile.reload();

        //Örnek bir dosya okuma kodu. Klasik config.yml dosyası okunması gibi okunur. Genelde get metodu kullanılır.
        if(CustomFile.get().getBoolean("Deneme") == true) {
            //blablabla
        }
    }

}

Çıktı :

cikti.png


Evet konunun sonuna geldik. Umarım işinize yarayacak bir kaynak olmuştur. Herkese iyi forumlar dilerim...

 

Emin olun işe yaracak bir konu açmışsınız ve düzgünce anlatmışsınız.

Elinize sağlık!

 
Emin olun işe yaramayacak bir konu açmışsınız ve düzgünce anlatamamışsınız.
Ellerinizi boş yere yormuşsunuz.

1619917712541.png


1619917742976.png
 
Son düzenleme:
Yorumun için teşekkür ederim. Ama static bölümünü neden kırmızı dikdörtgen içerisine alıp config okuma kodunu alıntı yaptınız anlayamadım.
işte tam olarak da bu sebepten alıntıladı.. anlamadığınız işlere karışmayın.
 
işte tam olarak da bu sebepten alıntıladı.. anlamadığınız işlere karışmayın.
Bilmediğim şeyler olabilir reddedemem. Ama bildiğim kadarıyla static kodu bulunduğu class dosyası dışında başka bir class dosyasında onu kullanabilmek için kullanılıyor. Bende zaten konuda 2 adet class dosyası oluşturdum. Birisi config dosyası için diğeride ana dosya olarak. Ana dosyada config dosyasındaki reload'ı kullanabilmem için static kodunu kullanmam gerekiyordu. Eğer yanlışım varsa düzeltebilirsiniz. Ben konuya eklerim üyeler yanlış bilgi edinmesin.
 
Son düzenleme:
Bilmediğim şeyler olabilir reddedemem. Ama bildiğim kadarıyla static kodu bulunduğu class dosyası dışında başka bir class dosyasında onu kullanabilmek için kullanılıyor. Bende zaten konuda 2 adet class dosyası oluşturdum. Birisi config dosyası için diğeride ana dosya olarak. Ana dosyada config dosyasındaki reload'ı kullanabilmem için static kodunu kullanmam gerekiyordu. Eğer yanlışım varsa düzeltebilirsiniz.
Bir metodu veya değişkeni static yaptığında o doğrudan ramde tutulur ve diğer classlardan doğrudan çekilebilir ve yine bu yüzden her şeyi static yapmamalısın.

Zaten static yaptığın bir şeyi private yapıp onun getter setter metodlarını yazman çok kötü bir fikir çünkü neden yapasın. (her zaman değil ama bu kadar basit bir kod için kesinlikle gereksiz.)

Kısaca başka bir classtan metod çekmek için o classı newlemen gerekir.
new Config().save() falan gibi

if zaten boolean kabul eder. booleanı == ile checklemek tamamen gereksiz aslına bakarsan eclipse bu konuda seni uyarmış olmalı.

CustomFile.get().getBoolean("Deneme") ve CustomFile.get().getBoolean("Deneme") == true tamamen aynı şey.

Eğer bir Java rehberi yapıyorsan bunları sana anlatmam çok gülünç bir durum. Bunlar Javanın en en temel şeyleridir. Bilmiyorsanız kimse size rehber açın demez. Biliyorsanız diye de rehber açmanız gerekmez. İnternette pek çok Javacı tarafından hazırlanmış kaynak var zaten.

Önce bir rehber okumanı daha sonra rehber yazmanı tavsiye ederim.
 
Son düzenleme:
Bir metodu veya değişkeni static yaptığında o doğrudan ramde tutulur ve diğer classlardan doğrudan çekilebilir ve yine bu yüzden her şeyi static yapmamalısın.

Zaten static yaptığın bir şeyi private yapıp onun getter setter metodlarını yazman çok kötü bir fikir çünkü neden yapasın. (her zaman değil ama bu kadar basit bir kod için kesinlikle gereksiz.)

Kısaca başka bir classtan metod çekmek için o classı newlemen gerekir.
new Config().save() falan gibi

if zaten boolean kabul eder. booleanı == ile checklemek tamamen gereksiz aslına bakarsan eclipse bu konuda seni uyarmış olmalı.

CustomFile.get().getBoolean("Deneme") ve CustomFile.get().getBoolean("Deneme") == true tamamen aynı şey.

Eğer bir Java rehberi yapıyorsan bunları sana anlatmam çok gülünç bir durum. Bunlar Javanın en en temel şeyleridir. Bilmiyorsanız kimse size rehber açın demez. Biliyorsanız diye de rehber açmanız gerekmez. İnternette pek çok Javacı tarafından hazırlanmış kaynak var zaten.

Önce bir rehber okumanı daha sonra rehber yazmanı tavsiye ederim.
Yorumun için teşekkür ederim.
 
Kendini geliştirmen dileğiyle, başarılar!​
 
kanka hem bilmiyorsun hemde milleti yanlış yönlendiriyorsun
Aslında kaynakta yanlışlık yok. Yanlışlık olması için kodun yapısı bozuk ve çalışmaz durumda olması lazım. Ben bu kaynağı kullanan birçok kişi gördüm. Ayrıca bende kendi sunucuma yaptığım eklentilerde kullandım herhangi bir sıkıntı çıkarmadı.
Kendini geliştirmen dileğiyle, başarılar!​
Teşekkür ederim.
 
Yeni başlayan birisine instance öğretmektense static olarak göstermesi gayet normal ve yapılması gereken bir hareket. Zira bu kaynak bilen kişiler için değil bilmeyen kişiler için gayet mantıklıdır.
Elinize sağlık.
 
Yeni başlayan birisine instance öğretmektense static olarak göstermesi gayet normal ve yapılması gereken bir hareket. Zira bu kaynak bilen kişiler için değil bilmeyen kişiler için gayet mantıklıdır.
Elinize sağlık.
Teşekkür ederim.
 
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