YgtGamingTR
Elmas Madencisi
- Mesajlar
- 804
- En iyi cevaplar
- 0
- Beğeniler
- 482
- Puanları
- 0
(11kurabiye)
Son düzenleme:
if(!oyuncu.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("clothesline"))
if(oyuncu.getItemInHand() != null && !oyuncu.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("clothesline"))
saol saatlerdir nası isim vereceğimi arıyordum deneyeceğimBurada NullPointerException veriyor. Galiba oyuncunun elindeki item ile alakalı. Bu satırı:Kod:if(!oyuncu.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("clothesline"))
bu şekilde değiştirirsen sanırım sorun çözülür.Kod:if(oyuncu.getItemInHand() != null && !oyuncu.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("clothesline"))
hocam peki adama nasıl hasar verdirticem hasar vermiyordaBurada NullPointerException veriyor. Galiba oyuncunun elindeki item ile alakalı. Bu satırı:Kod:if(!oyuncu.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("clothesline"))
bu şekilde değiştirirsen sanırım sorun çözülür.Kod:if(oyuncu.getItemInHand() != null && !oyuncu.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("clothesline"))
Birincisi direk çözümü söylemek yerine benim yaptığım gibi nasıl çözebileceğine dair yardımcı olsan çok daha etkili olur. İkincisi hala NPE verebilir. Eşyanın ItemMeta'sı var mı diye kontrol etmiyorsun. ItemMeta'nın DisplayName'i var mı diye de kontrol etmiyorsun.Burada NullPointerException veriyor. Galiba oyuncunun elindeki item ile alakalı. Bu satırı:Kod:if(!oyuncu.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("clothesline"))
bu şekilde değiştirirsen sanırım sorun çözülür.Kod:if(oyuncu.getItemInHand() != null && !oyuncu.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("clothesline"))
senin yaptığında fark ettim zaten 25. line da olduğunu sonra araştırdım nasıl itemin adını kontrol edebilirim diye arkadaş atmış saolsun sayende birkaç şey daha öğrendim teşekkürler @Personinblack ve moba hasar vermeyide buldum player ınterract eventini playerınterractentityevent olarak değiştirdim artık hasarda veriyorBirincisi direk çözümü söylemek yerine benim yaptığım gibi nasıl çözebileceğine dair yardımcı olsan çok daha etkili olur. İkincisi hala NPE verebilir. Eşyanın ItemMeta'sı var mı diye kontrol etmiyorsun. ItemMeta'nın DisplayName'i var mı diye de kontrol etmiyorsun.
Ama senin verdiğin link tamamen ingilizce ve yardım edeceksem de Türkçe bir kaynak bulamayacak kadar üşengecim :/ Ayrıca benim bildiğim kadarıyla bir ItemStack'in her zaman ItemMeta'sı ve ismi vardır. O yüzden onları kontrol etmem. Sorun çıkarsaydı onlara da bakardıkBirincisi direk çözümü söylemek yerine benim yaptığım gibi nasıl çözebileceğine dair yardımcı olsan çok daha etkili olur. İkincisi hala NPE verebilir. Eşyanın ItemMeta'sı var mı diye kontrol etmiyorsun. ItemMeta'nın DisplayName'i var mı diye de kontrol etmiyorsun.
yok az bir şey anladım onun attığından hatta bayağı bir yardımdcı oldu sadece isimi kontrol etmeyi bulamamıştımAma senin verdiğin link tamamen ingilizce ve yardım edeceksem de Türkçe bir kaynak bulamayacak kadar üşengecim :/ Ayrıca benim bildiğim kadarıyla bir ItemStack'in her zaman ItemMeta'sı ve ismi vardır. O yüzden onları kontrol etmem. Sorun çıkarsaydı onlara da bakardık
Eğer her zaman olsaydı Bukkit neden oraya "hasItemMeta" ve "hasDisplayName" booleanlarını koysun? Yardımın üşengeçliği olmaz edeceksen düzgün yardım edersin. Copy paste yapmayı öğretmek yardım etmek sayılmıyor. Anlamadığını söyleseydi linkte anlatılanları çevirebilirdim.Ama senin verdiğin link tamamen ingilizce ve yardım edeceksem de Türkçe bir kaynak bulamayacak kadar üşengecim :/ Ayrıca benim bildiğim kadarıyla bir ItemStack'in her zaman ItemMeta'sı ve ismi vardır. O yüzden onları kontrol etmem. Sorun çıkarsaydı onlara da bakardık
saol şimdide sayende HasDisplayName yi öğrendim bu benim aradığım şey sanırımEğer her zaman olsaydı Bukkit neden oraya "hasItemMeta" ve "hasDisplayName" booleanlarını koysun? Yardımın üşengeçliği olmaz edeceksen düzgün yardım edersin. Copy paste yapmayı öğretmek yardım etmek sayılmıyor. Anlamadığını söyleseydi linkte anlatılanları çevirebilirdim.
hocam hasarı kullanana veriyor ben sağ tıkladığı entity e versin istiyorum nasıl yapacağım ve 2 tıklayışta çalışıyorEğer her zaman olsaydı Bukkit neden oraya "hasItemMeta" ve "hasDisplayName" booleanlarını koysun? Yardımın üşengeçliği olmaz edeceksen düzgün yardım edersin. Copy paste yapmayı öğretmek yardım etmek sayılmıyor. Anlamadığını söyleseydi linkte anlatılanları çevirebilirdim.
package me.pl;
import java.util.HashMap;
import org.bukkit.Location;
import org.bukkit.entity.Damageable;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.Vector;
public class ilk extends JavaPlugin implements Listener{
public void onEnable(){
getServer().getPluginManager().registerEvents(this,this);
}
private HashMap<Player, Long> cooldown = new HashMap<Player, Long>();
@EventHandler
public void clothesline(PlayerInteractEntityEvent event) {
Player oyuncu = event.getPlayer();
if(oyuncu.hasPermission("clothesline"))
{
if(oyuncu.getItemInHand() != null && !oyuncu.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("clothesline"))
return; // elindeki item clothesline değilse iptal et
if(!cooldown.containsKey(oyuncu))
{
cooldown.put(oyuncu, System.currentTimeMillis());
}
else if(cooldown.get(oyuncu) + 10000L > System.currentTimeMillis()) // 10,000 ms = 1sn
{
oyuncu.sendMessage("§4biraz beklemelisin"); //mesaj
return;
}
else
{
cooldown.remove(oyuncu); // 10 saniye geçmiş böylece silebiliriz
}
Damageable pd = (Damageable) oyuncu;
oyuncu.setHealth(pd.getHealth() - 1); // 1 Kalp vuruyor
Location pLoc = oyuncu.getLocation();
Vector vec = oyuncu.getLocation().getDirection();
double x = vec.getX() * 2.D;
double z = vec.getZ() * 2.D;
Location nLoc = new Location(pLoc.getWorld(), pLoc.getX() + x, pLoc.getY(), pLoc.getZ() + z);
oyuncu.teleport(nLoc); // 2 blok ötesindeki koordinata ışınlıyor [bakış açısına ayarladım]
event.setCancelled(true);
}
}
}
e.getRightClicked() metodunu kullanarak sağ tıklanan entity'i alman gerekiyor. Ayrıca sağ tıklanan entitynin lokasyonunuda almak istersen PlayerInteractAtEntity eventını kullanabilirsin.saol şimdide sayende HasDisplayName yi öğrendim bu benim aradığım şey sanırım
hocam hasarı kullanana veriyor ben sağ tıkladığı entity e versin istiyorum nasıl yapacağım ve 2 tıklayışta çalışıyor
Kod:package me.pl; import java.util.HashMap; import org.bukkit.Location; import org.bukkit.entity.Damageable; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.Vector; public class ilk extends JavaPlugin implements Listener{ public void onEnable(){ getServer().getPluginManager().registerEvents(this,this); } private HashMap<Player, Long> cooldown = new HashMap<Player, Long>(); @EventHandler public void clothesline(PlayerInteractEntityEvent event) { Player oyuncu = event.getPlayer(); if(oyuncu.hasPermission("clothesline")) { if(oyuncu.getItemInHand() != null && !oyuncu.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("clothesline")) return; // elindeki item clothesline değilse iptal et if(!cooldown.containsKey(oyuncu)) { cooldown.put(oyuncu, System.currentTimeMillis()); } else if(cooldown.get(oyuncu) + 10000L > System.currentTimeMillis()) // 10,000 ms = 1sn { oyuncu.sendMessage("§4biraz beklemelisin"); //mesaj return; } else { cooldown.remove(oyuncu); // 10 saniye geçmiş böylece silebiliriz } Damageable pd = (Damageable) oyuncu; oyuncu.setHealth(pd.getHealth() - 1); // 1 Kalp vuruyor Location pLoc = oyuncu.getLocation(); Vector vec = oyuncu.getLocation().getDirection(); double x = vec.getX() * 2.D; double z = vec.getZ() * 2.D; Location nLoc = new Location(pLoc.getWorld(), pLoc.getX() + x, pLoc.getY(), pLoc.getZ() + z); oyuncu.teleport(nLoc); // 2 blok ötesindeki koordinata ışınlıyor [bakış açısına ayarladım] event.setCancelled(true); } } }
e.getRightClicked() metodunu kullanarak sağ tıklanan entity'i alman gerekiyor. Ayrıca sağ tıklanan entitynin lokasyonunuda almak istersen PlayerInteractAtEntity eventını kullanabilirsin.
Entity kurban = event.getRightClicked();
Sormak yerine test edebilirsin.sağ tıklanan entity yi almak ? bumuKod:Entity kurban = event.getRightClicked();
test ettim ve hata vermedi. fakatSormak yerine test edebilirsin.
kurban.setHealth(pd.getHealth() - 1); // 1 Kalp vuruyor
((Damageable) kurban).setHealth(pd.getHealth() - 1); // 1 Kalp vuruyor
https://hub.spigotmc.org/javadocs/s...html#damage(double, org.bukkit.entity.Entity)test ettim ve hata vermedi. fakathata veriyor bu yüzden kodu alttakiyle değiştirdim ve denemeden önce doğrumu diye sana sormak istiyorumKod:kurban.setHealth(pd.getHealth() - 1); // 1 Kalp vuruyor
Kod:((Damageable) kurban).setHealth(pd.getHealth() - 1); // 1 Kalp vuruyor