- 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.
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.
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
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.
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.
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.
}
Yazı Yazdırma
Evet isterseniz birde yazı yazdırmayı deneyelim. Bunun için drawText kullanacağız.
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.
}
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.
Ş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.
}
Evet konunun sonuna geldik. Umarım yardımı dokunmuştur.