Sol Reklam
Sağ Reklam

Rehber JAVA Minecraft Eklenti harita üzerine pixel, yazı, resim oluşturma | Minecraft Eklenti Rehberi

Durum
Mesaj gönderimine kapalı.

HaktanOzkan

Demir Cevheri Gibiyim
Premium

Discord:

hktanozkan

Katılım
22 Temmuz 2014
Mesajlar
187
Elmaslar
100
Puanlar
13.775
Minecraft
HaktanOzkan
Merhaba. Bu konuda java ile harita içeriğini nasıl tamamen değiştireceğinizi göstereceğim.

Harita

Öncelikle haritanın yapısını bilmeliyiz. Haritalar ilk hali ile boşturlar. Boş haritaya sağ tıklandığında alanınızın 128x128 yani 16.384 blok yükleme yapar ve haritaya yansıtır. Bulunduğunuz bölgeden uzaklaştıkça yeni yerleri yüklemeye devam eder. Haritalar 128x128 piksele sahiptirler ölçeğe göre değişmezler.

Proje başlatmayı, paket oluşturmayı veya class dosyası oluşturmayı geçeceğim. Bu konu üzerine forumda bir çok konu var.

Yavaştan kod kısmına geçiş yapalım.


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


Temel

Spigot'ta eventler vardır. Bu eventler oyundaki işleyişi kontrol etmemizi sağlar. Bu konuda MapInitializeEvent eventini kullanacağız.
Java:
@EventHandler
    public void map(MapInitializeEvent e) {
       
    }

Harita üzerinde çalışabilmek için bir mapView döndürmemiz gerekiyor.
Java:
@EventHandler
    public void map(MapInitializeEvent e) {
        MapView m = e.getMap();
    }

Şimdi harita üzerinde oluşturucuları temizleyelim. Eğer tüm alanı resimle veya pixel ile kaplamadığınız sürece harita elinizde ilerlediğiniz zaman arkanızda dünyanızın resmi çıkacaktır. Bunu engellemek için oluşturucuları temizlememiz gerekir.
Java:
@EventHandler
    public void map(MapInitializeEvent e) {
        MapView m = e.getMap();
        m.getRenderers().clear();
    }

İşlemler

Evet artık haritamızın üzerine resim, pixel gibi istediğimiz şeyleri koymaya başlayalım. Heme yeni bir class dosyası açalım. Ben adını RenderMap olarak koydum siz istediğiniz isimi kullanabilirsiniz.

Yeni bir class dosyası oluşturduktan sonra dosya isminizin yanına "extends MapRenderer" yazmalısınız. Bu class dosyanızı tanıtmak içindir.

Java:
public class RenderMap extends MapRenderer{

}

Eğer bir IDE kullanıyorsanız örn. Eclipse sizden bir metod ekleme izni isteyecektir. Onaylarsanız otomatik olarak sizleri için oluşturur. Oluşturduğu kod :
Java:
public class RenderMap extends MapRenderer{
    
    @Override
    public void render(MapView view, MapCanvas canvas, Player p) {

    }

}

Bu işlemden sonrası sizin isteğinize göre şekillenir. İsterseniz canvas ile haritaya hayal gücünüzü kullanarak resimler çizdirebilir, isterseniz internetten veya bilgisayarınızdan istediğiniz bir resmi harita üzerine aktarabilirsiniz.

Canvas kullanımı şu şekilde olur :


Pixel Oluşturma
Java:
@Override
    public void render(MapView view, MapCanvas canvas, Player p) {
        canvas.setPixel(5, 5, MapPalette.RED);
        
        //setPixel(x, y, MapPalette);
        //x ve y kısımları harita üzerindeki pixelin nerede olacağını belirlemek için
        //kullanılır.
        
        //MapPalette kısmı ise renklerdir. Toplam 14 tane renk seçeneği vardır.
    }

Bu kodun oyun içi çıktısı şu şekilde olacaktır.

setpixel.png


For Döngüsü İle Dikdörtgen

Biraz daha ileriye gidelim ve bir dikdörtgen çizmeyi deneyelim. Bunun için tek tek setpixel kullanabilirsiniz veya for döngüsü ile pixelleri istediğiniz sayı değerleri arasında döndürebilirsiniz.
Java:
@Override
    public void render(MapView view, MapCanvas canvas, Player p) {
        for(int x=0; x < 50; x++) {
            for(int y=0; y < 50; y++) {
                canvas.setPixel(x, y, MapPalette.WHITE);
            }
        }
        
        //x ve y kordinatlarını 50 sayısına kadar tekrar ederek
        //beyaz bir dikdörtgen oluşturmamızı sağlar.
    }

fordöngüsü.png


Yazı Yazdırma

Evet isterseniz birde yazı yazdırmayı deneyelim. Bunun için drawText kullanacağız.
Java:
@Override
    public void render(MapView view, MapCanvas canvas, Player p) {
        for(int x=0; x < 50; x++) {
            for(int y=0; y < 50; y++) {
                canvas.setPixel(x, y, MapPalette.WHITE);
            }
        }
        
        canvas.drawText(10, 10, MinecraftFont.Font, "MC-TR");
        
        //drawText(x, y, Font, Text); şeklinde kullanılır.
    }
text.png


Resim Oluşturma

Şimdi ise harita üzerine nasıl resim işleyeceğimize gelelim. Bunun için ImageIO sınıfını kullanacağız. ImageIO sınıfı resimleri url'lerden, dosya yolundan çekmenizi sağlar.
Java:
@Override
    public void render(MapView view, MapCanvas canvas, Player p) {
        try {
            
            //BufferedImage image = ImageIO.read(new URL("link"));
            //Link şeklinde kullanımı bu şekilde olacaktır.
            
            BufferedImage resim = ImageIO.read(new File("C:\\Program Files (x86)\\HaktanOzkan.png"));
            canvas.drawImage(0, 0, resim);
        
        } catch(IOException x) {
            x.printStackTrace();
        }
        
        //ImageIO sınıfı ile dosyamızı çektik ve bunu drawImage ile harita üzerine yansıttık.
        //x ve y kordinatlarını 0 olarak ayarladıkki 128x128 piksel resmimiz harita üzerini
        //tamamen kaplasın.
    }


drawimage.png


Evet konunun sonuna geldik. Umarım yardımı dokunmuştur.
 
W

Wafe

Ziyaretçi
Güzel ve başarılı bir konu olmuş ellerinize sağlık <3
 

HaktanOzkan

Demir Cevheri Gibiyim
Premium

Discord:

hktanozkan

Katılım
22 Temmuz 2014
Mesajlar
187
Elmaslar
100
Puanlar
13.775
Minecraft
HaktanOzkan

RunHeaven

HiperNW Owner & Bot Developer & Scripter

Discord:

RunHeaven

Katılım
10 Mayıs 2020
Mesajlar
385
Elmaslar
149
Puanlar
4.550
Minecraft
RunHeaven
Merhaba. Bu konuda java ile harita içeriğini nasıl tamamen değiştireceğinizi göstereceğim.

Harita

Öncelikle haritanın yapısını bilmeliyiz. Haritalar ilk hali ile boşturlar. Boş haritaya sağ tıklandığında alanınızın 128x128 yani 16.384 blok yükleme yapar ve haritaya yansıtır. Bulunduğunuz bölgeden uzaklaştıkça yeni yerleri yüklemeye devam eder. Haritalar 128x128 piksele sahiptirler ölçeğe göre değişmezler.

Proje başlatmayı, paket oluşturmayı veya class dosyası oluşturmayı geçeceğim. Bu konu üzerine forumda bir çok konu var.

Yavaştan kod kısmına geçiş yapalım.


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


Temel

Spigot'ta eventler vardır. Bu eventler oyundaki işleyişi kontrol etmemizi sağlar. Bu konuda MapInitializeEvent eventini kullanacağız.
Java:
@EventHandler
    public void map(MapInitializeEvent e) {
     
    }

Harita üzerinde çalışabilmek için bir mapView döndürmemiz gerekiyor.
Java:
@EventHandler
    public void map(MapInitializeEvent e) {
        MapView m = e.getMap();
    }

Şimdi harita üzerinde oluşturucuları temizleyelim. Eğer tüm alanı resimle veya pixel ile kaplamadığınız sürece harita elinizde ilerlediğiniz zaman arkanızda dünyanızın resmi çıkacaktır. Bunu engellemek için oluşturucuları temizlememiz gerekir.
Java:
@EventHandler
    public void map(MapInitializeEvent e) {
        MapView m = e.getMap();
        m.getRenderers().clear();
    }

İşlemler

Evet artık haritamızın üzerine resim, pixel gibi istediğimiz şeyleri koymaya başlayalım. Heme yeni bir class dosyası açalım. Ben adını RenderMap olarak koydum siz istediğiniz isimi kullanabilirsiniz.

Yeni bir class dosyası oluşturduktan sonra dosya isminizin yanına "extends MapRenderer" yazmalısınız. Bu class dosyanızı tanıtmak içindir.

Java:
public class RenderMap extends MapRenderer{

}

Eğer bir IDE kullanıyorsanız örn. Eclipse sizden bir metod ekleme izni isteyecektir. Onaylarsanız otomatik olarak sizleri için oluşturur. Oluşturduğu kod :
Java:
public class RenderMap extends MapRenderer{
  
    @Override
    public void render(MapView view, MapCanvas canvas, Player p) {

    }

}

Bu işlemden sonrası sizin isteğinize göre şekillenir. İsterseniz canvas ile haritaya hayal gücünüzü kullanarak resimler çizdirebilir, isterseniz internetten veya bilgisayarınızdan istediğiniz bir resmi harita üzerine aktarabilirsiniz.

Canvas kullanımı şu şekilde olur :


Pixel Oluşturma
Java:
@Override
    public void render(MapView view, MapCanvas canvas, Player p) {
        canvas.setPixel(5, 5, MapPalette.RED);
      
        //setPixel(x, y, MapPalette);
        //x ve y kısımları harita üzerindeki pixelin nerede olacağını belirlemek için
        //kullanılır.
      
        //MapPalette kısmı ise renklerdir. Toplam 14 tane renk seçeneği vardır.
    }

Bu kodun oyun içi çıktısı şu şekilde olacaktır.

Eki Görüntüle 171191

For Döngüsü İle Dikdörtgen

Biraz daha ileriye gidelim ve bir dikdörtgen çizmeyi deneyelim. Bunun için tek tek setpixel kullanabilirsiniz veya for döngüsü ile pixelleri istediğiniz sayı değerleri arasında döndürebilirsiniz.
Java:
@Override
    public void render(MapView view, MapCanvas canvas, Player p) {
        for(int x=0; x < 50; x++) {
            for(int y=0; y < 50; y++) {
                canvas.setPixel(x, y, MapPalette.WHITE);
            }
        }
      
        //x ve y kordinatlarını 50 sayısına kadar tekrar ederek
        //beyaz bir dikdörtgen oluşturmamızı sağlar.
    }

Eki Görüntüle 171192

Yazı Yazdırma

Evet isterseniz birde yazı yazdırmayı deneyelim. Bunun için drawText kullanacağız.
Java:
@Override
    public void render(MapView view, MapCanvas canvas, Player p) {
        for(int x=0; x < 50; x++) {
            for(int y=0; y < 50; y++) {
                canvas.setPixel(x, y, MapPalette.WHITE);
            }
        }
      
        canvas.drawText(10, 10, MinecraftFont.Font, "MC-TR");
      
        //drawText(x, y, Font, Text); şeklinde kullanılır.
    }
Eki Görüntüle 171193

Resim Oluşturma

Şimdi ise harita üzerine nasıl resim işleyeceğimize gelelim. Bunun için ImageIO sınıfını kullanacağız. ImageIO sınıfı resimleri url'lerden, dosya yolundan çekmenizi sağlar.
Java:
@Override
    public void render(MapView view, MapCanvas canvas, Player p) {
        try {
          
            //BufferedImage image = ImageIO.read(new URL("link"));
            //Link şeklinde kullanımı bu şekilde olacaktır.
          
            BufferedImage resim = ImageIO.read(new File("C:\\Program Files (x86)\\HaktanOzkan.png"));
            canvas.drawImage(0, 0, resim);
      
        } catch(IOException x) {
            x.printStackTrace();
        }
      
        //ImageIO sınıfı ile dosyamızı çektik ve bunu drawImage ile harita üzerine yansıttık.
        //x ve y kordinatlarını 0 olarak ayarladıkki 128x128 piksel resmimiz harita üzerini
        //tamamen kaplasın.
    }


Eki Görüntüle 171195

Evet konunun sonuna geldik. Umarım yardımı dokunmuştur.
İşe yaracak bir konu olmuş, elinize sağlık.​
 

HaktanOzkan

Demir Cevheri Gibiyim
Premium

Discord:

hktanozkan

Katılım
22 Temmuz 2014
Mesajlar
187
Elmaslar
100
Puanlar
13.775
Minecraft
HaktanOzkan

MustafaBingul

Creeper Evimi Patlattı

Discord:

BingulHan#4136

Katılım
27 Mayıs 2018
Mesajlar
401
Elmaslar
143
Puanlar
7.085
Yer
Türkiye
Minecraft
BingulHan
Çok yararlı bir konu.
 
Durum
Mesaj gönderimine kapalı.
Neden altınlarını Discord sunucumuzda kazmıyorsun? TIKLA VE KATIL!
Yukarı