- Katılım
- 22 Temmuz 2014
- Mesajlar
- 187
- Elmaslar
- 100
- Puanlar
- 13.775
- Minecraft
- HaktanOzkan
Hologram Oluşturma
Hologramları bir entity'nin ismi olarak belirleyip entity'i gizleriz ve her entity için kullanabilirsiniz. Bu konuda armor stand kullanacağız ki çoğu eklentide bunu kullanır çünkü sabit yani hareket etmeyen bir entity'dir. Önce bir armor stand oluşturacağız ve onu gizleyeceğizki sadece vereceğimiz isim gözüksün, buda hologram olarak nitelendirdiğimiz şeyi yapmamızı sağlasın. Daha sonra vereceğimizin ismin belirgin olmasını sağlayacağız. En son olarak bir isim belirleyeceğiz vereceğimiz isim bizim hologramımız olacak. Bu işlemleri sade bir şekilde yapmayacağız. Onun yerine oyuncumuz bir sandık koyduğunda üst tarafında sandık sahibinin adının yazmasını sağlayacağız. Bu şekilde konu içerisinde bir kaç event görme imkanınada sahip olacaksınız.
Paket oluşturmak, class dosyası oluşturmak gibi en temel şeyleri göstermeden direkt olarak kod kısmına geçeceğim. Evet yavaştan konumuza geçelim.
Kullandığım IDE : Eclipse IDE for Java Developers
Java Sürümü : JavaSE-1.8
Minecraft Sürümü : 1.8
Java Sürümü : JavaSE-1.8
Minecraft Sürümü : 1.8
İlk olarak ana class dosyamızda onEnable metodu içinde eventlerimizi yazacağımız başka bir class dosyamızı tanıtacağız.
Java:
public class Main extends JavaPlugin{
public void onEnable() {
getServer().getPluginManager().registerEvents(new HologramEventleri(), this);
}
}
HologramEventleri isimde bir dosya oluşturduk ve içerisine BlockPlaceEvent'ini koyacağız. Bu event herhangi bir blok koyulduğunda çağırılan bir eventtir.
Java:
public class HologramEventleri implements Listener {
@EventHandler
public void onPlace(BlockPlaceEvent e) {
}
}
Şimdi event içinde oyuncumuzu ve bloğumuzu tanıttıktan sonra koyacağımız blok eğer chest ise neler yapması gerektiğini söylemeliyiz. Bunun için if else kullanacağız.
Java:
@EventHandler
public void onPlace(BlockPlaceEvent e) {
Player p = e.getPlayer();
Block block = e.getBlock();
if(block.getType().equals(Material.CHEST)) {
}
}
Koyulan blok chest ise değerini döndürdükten sonra koyulan chest'in bulunduğu lokasyonda bir armor stand oluşturalım. Bunun için önce koyulan chest'in lokasyonunu tanıtmamız gerekiyor. Bunuda bu şekilde yapıyoruz.
Java:
@EventHandler
public void onPlace(BlockPlaceEvent e) {
Player p = e.getPlayer();
Block block = e.getBlock();
if(block.getType().equals(Material.CHEST)) {
Location chestloc = block.getLocation();
ArmorStand hologram = (ArmorStand) p.getWorld().spawnEntity(chestloc, EntityType.ARMOR_STAND);
}
}
Oyuncunun bulunduğu dünya içinde bir entity doğurmasını istedik. Doğan entity'nin koyulan chest bloğunun lokasyonunda doğmasını ve ARMOR_STAND olarak doğmasını istedik. Doğan entity'yi hologram ismi ile ArmorStand olarak atadık. Bundan sonra eklenti hologram isimli atamayı Armor Stand olarak tanıyacaktır ve üzerinde oynamamıza izin verecektir.
Buraya kadar gelinen noktada çıktı şu şekilde olacaktır.
Şimdi armor stand'imiz üzerinde değişimler yapalım ve biraz daha şekillendirelim.
Java:
@EventHandler
public void onPlace(BlockPlaceEvent e) {
Player p = e.getPlayer();
Block block = e.getBlock();
if(block.getType().equals(Material.CHEST)) {
Location chestloc = block.getLocation();
ArmorStand hologram = (ArmorStand) p.getWorld().spawnEntity(chestloc, EntityType.ARMOR_STAND);
hologram.setCustomNameVisible(true);
hologram.setCustomName(ChatColor.RED + "Bu Sandık " + p.getName() + " Isimli Oyuncunun");
}
}
Hızlı bir giriş yaptık ve armor stand'imizin ismini belirgin hale getirdik (setCustomNameVisible) ve daha sonra isminin rengini kırmızı yaprak (ChatColor.RED) ' "Bu Sandık " + p.getName() + " Isimli Oyuncunun" ' ismini yazdırdık. (p.getName() oyuncunun ismini belirtir.)
Şimdi ise armor standimizi chest'e ortalayalım. Bunun için x y z kordinatlarıyla oynamamız gerekiyor. X ve Z kordinatlarına 0.5 lik bir ekleme yaparsak eğer bloğa göre ortalamış oluyoruz.
Java:
ArmorStand hologram = (ArmorStand) p.getWorld().spawnEntity(chestloc.add(0.5, 0, 0.5), EntityType.ARMOR_STAND);
Entity doğurmasını istediğimiz kodun lokasyon kısmına (add) etiketi açıyoruz ve içerisine x y z kodrinatlarını giriyoruz. chestloc.add(x, y, z).
Artık armor standimizi görünmez hale getirmenin vakti geldi. Bunun için setVisible(); etiketini kullanmamız gerekiyor. True değeri armor stand'i görünür hale false değeri armor stand'i görünmez hale getirir.
Son olarak kodumuz bu şekilde görünüyor.
Java:
@EventHandler
public void onPlace(BlockPlaceEvent e) {
Player p = e.getPlayer();
Block block = e.getBlock();
if(block.getType().equals(Material.CHEST)) {
Location chestloc = block.getLocation();
ArmorStand hologram = (ArmorStand) p.getWorld().spawnEntity(chestloc.add(0.5, 0, 0.5), EntityType.ARMOR_STAND);
hologram.setCustomNameVisible(true);
hologram.setCustomName(ChatColor.RED + "Bu Sandık " + p.getName() + " Isimli Oyuncunun");
hologram.setVisible(false);
}
}
Çıktı
Geriye tek bir şey kaldı oda armor standimizin yer çekiminden etkilenmesini kapatmak. Bu olay sizin isteğinize bağlıdır olmazsa olmaz değildir. Ama blok altı boş bir yere koyulur ise armor stand doğal olarak yere düşecektir. Buda hologramın istenilen bölüme koyulmasına engel olacaktır.
Bunun için setGravity(); kullanacağız.
Java:
hologram.setGravity(false);
False değeri yer çekimini kapatır True değeri ise yer çekimini açar.
Umuyorumki gerekli bilgileri temin edebilmiş, öğrenebilmişsinizdir. Herkese iyi forumlar dilerim...
Tüm Kodlar
Main isimli ana dosya :
Java:
package me.hologram;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin{
public void onEnable() {
getServer().getPluginManager().registerEvents(new HologramEventleri(), this);
}
}
HologramEventleri isimli event dosyası :
Java:
package me.hologram;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import net.md_5.bungee.api.ChatColor;
public class HologramEventleri implements Listener {
@EventHandler
public void onPlace(BlockPlaceEvent e) {
Player p = e.getPlayer();
Block block = e.getBlock();
if(block.getType().equals(Material.CHEST)) {
Location chestloc = block.getLocation();
ArmorStand hologram = (ArmorStand) p.getWorld().spawnEntity(chestloc.add(0.5, 0, 0.5), EntityType.ARMOR_STAND);
hologram.setCustomNameVisible(true);
hologram.setCustomName(ChatColor.RED + "Bu Sandık " + p.getName() + " Isimli Oyuncunun");
hologram.setVisible(false);
hologram.setGravity(false);
}
}
}