Nasıl TNT atan yay yaparım ? (kod çalışmıyor)

Krumb069

Nether Yerlisi
Mesajlar
2,151
En iyi cevaplar
1
Beğeniler
506
Puanları
1,250
Normal yayı çekince ok yerine tnt atan bir yay yapmaya çalıştım ancak /tntyay yazınca yayı verse de ateş edince ok atıyor. Nasıl düzeltirim ?
Hiçbir hata gözükmüyor
Kod:
Kod:
package com.tntyay;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{
     public static final Logger log = Logger.getLogger("Minecraft");
        public void onEnable() {
            log.log(Level.INFO, "[TNT-Yay]TNTYay Plugini Calisiyor!");
        }
        public void onDisable() {
            log.log(Level.INFO, "[TNT-Yay]TNTYay Plugini Calisiyor!");           
        }
       
     @EventHandler
     public void bow(EntityShootBowEvent e){
       if (!(e.getEntity() instanceof Player)){
         return;
       }
       Player o = (Player)e.getEntity();
            ItemStack tntyay = o.getItemInHand();
            ItemMeta tntyayMeta = tntyay.getItemMeta();
            if (tntyayMeta.getDisplayName().equalsIgnoreCase("TNTYay")){
                e.setProjectile(o.getWorld().spawnEntity(o.getLocation(), EntityType.PRIMED_TNT));
                    }
            else{
                  e.setCancelled(true);
                }
        }
     public boolean onCommand(CommandSender gonderen, Command komut, String label, String[] args) {
         if (komut.getName().equalsIgnoreCase("tntyay")){
             Player oyuncu = (Player) gonderen;
             ItemStack tntyay = new ItemStack(Material.BOW);
             ItemMeta tntyayMeta = tntyay.getItemMeta();
             tntyayMeta.setDisplayName("TNTYay");
             tntyay.setItemMeta(tntyayMeta);
             Inventory oyuncuEnvanter = oyuncu.getInventory();
             oyuncuEnvanter.addItem(tntyay);
             oyuncu.sendMessage(ChatColor.RED + "TNT-Yay alındı.");
         }
         return false;
     }
     }
 


MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Player p = (Player) e.getEntity();
yerine
Player p = (Player) e.getShooter();
dene?
 

TheMuhammed2188

Java <3
Mesajlar
779
En iyi cevaplar
0
Beğeniler
432
Puanları
700
Ruh hali
Kod'unun denedim ve düzgün çalışıyor.
Fakat sorun yinede var.
Oluşturulan TNT'nin Velocity'sini fırlatılan okunkiyle aynı yapman lazım.
Merak etme hiç uğraşmıcaksın çünkü kodları vericem :D
NOT: Burda elindeki yay'ın adını kontrol etmiyor kendin eklersin.
PHP:
          if (!(e.getEntity() instanceof Player)){
              return;
            }
            Player o = (Player)e.getEntity();
            Entity ent = o.getWorld().spawnEntity(o.getLocation(), EntityType.PRIMED_TNT);
            ent.setVelocity(e.getProjectile().getVelocity());
            e.setProjectile(ent);

Bu arada ok atmaması gibi bir durum yok ama senin kodlarında hata var.
"implements Listener" kısmı yok ve onEnable() kısmında "Bukkit.getServer().getPluginManager().registerEvents(this, this);" yok :)
Bunlar olmadan Event'lerin çalışmaması lazım :)
 

SFKY

Kızıltaş Madencisi
Mesajlar
667
En iyi cevaplar
0
Beğeniler
296
Puanları
0
veya şunu deneyebilirsin;
PHP:
    @EventHandler(priority = EventPriority.NORMAL)
    private void okPatladiginda(final ProjectileHitEvent olay) {
        if (olay.getEntity() instanceof Arrow) {
            final Arrow ok = (Arrow) olay.getEntity();
            if (ok.getShooter() instanceof Player) {
                new BukkitRunnable() {
                    @Override
                    public void run() {
                        ok.getWorld().createExplosion(ok.getLocation().getX(), ok.getLocation().getY(), ok.getLocation().getZ(), 4F, false, false);
                        this.cancel();
                    }
                }.runTaskLater(this, 1L);
            }
        }
    }
 

Krumb069

Nether Yerlisi
Mesajlar
2,151
En iyi cevaplar
1
Beğeniler
506
Puanları
1,250
veya şunu deneyebilirsin;
PHP:
    @EventHandler(priority = EventPriority.NORMAL)
    private void okPatladiginda(final ProjectileHitEvent olay) {
        if (olay.getEntity() instanceof Arrow) {
            final Arrow ok = (Arrow) olay.getEntity();
            if (ok.getShooter() instanceof Player) {
                new BukkitRunnable() {
                    @Override
                    public void run() {
                        ok.getWorld().createExplosion(ok.getLocation().getX(), ok.getLocation().getY(), ok.getLocation().getZ(), 4F, false, false);
                        this.cancel();
                    }
                }.runTaskLater(this, 1L);
            }
        }
    }
Bu ok çarptığında patlama mı yapıyor ?
 

Mockingjayy

Obsidyen Madencisi
Mesajlar
1,442
En iyi cevaplar
0
Beğeniler
612
Puanları
1,390
Morebows kullan


Sent from my iPhone using Tapatalk
 

Krumb069

Nether Yerlisi
Mesajlar
2,151
En iyi cevaplar
1
Beğeniler
506
Puanları
1,250
Bir de bu kodlar 1.8 de de çalışır mı ?
 

Krumb069

Nether Yerlisi
Mesajlar
2,151
En iyi cevaplar
1
Beğeniler
506
Puanları
1,250
1.8 için çıkan plugin daha görmedim :D
sen görmemişsin spigotmc dekilerin neredeyse hepsi 1.8[DOUBLEPOST=1429378452,1429340564][/DOUBLEPOST]
veya şunu deneyebilirsin;
PHP:
    @EventHandler(priority = EventPriority.NORMAL)
    private void okPatladiginda(final ProjectileHitEvent olay) {
        if (olay.getEntity() instanceof Arrow) {
            final Arrow ok = (Arrow) olay.getEntity();
            if (ok.getShooter() instanceof Player) {
                new BukkitRunnable() {
                    @Override
                    public void run() {
                        ok.getWorld().createExplosion(ok.getLocation().getX(), ok.getLocation().getY(), ok.getLocation().getZ(), 4F, false, false);
                        this.cancel();
                    }
                }.runTaskLater(this, 1L);
            }
        }
    }
Bu kodun
sadece belli bir yayda çalışmasını nasıl sağlayabilrim ?
 

SFKY

Kızıltaş Madencisi
Mesajlar
667
En iyi cevaplar
0
Beğeniler
296
Puanları
0
sen görmemişsin spigotmc dekilerin neredeyse hepsi 1.8[DOUBLEPOST=1429378452,1429340564][/DOUBLEPOST]
Bu kodun
sadece belli bir yayda çalışmasını nasıl sağlayabilrim ?
PHP:
    private List<Integer> kontrol = Lists.newArrayList();
  
    @EventHandler
    private void patlayiciOkAtildiginda(ProjectileLaunchEvent sebep) {
        if (sebep instanceof Arrow) {
            Arrow ok = (Arrow) sebep.getEntity();
            if (ok.getShooter() instanceof Player) {
                Player oyuncu = (Player) ok.getShooter();
                if (oyuncu.getInventory().getItemInHand().hasItemMeta()) {
                    if (oyuncu.getInventory().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("TNTYAY")) {
                        this.kontrol.add(ok.getEntityId());
                    }
                }
            }
        }
    }
  
    @EventHandler(priority = EventPriority.NORMAL)
    private void okPatladiginda(final ProjectileHitEvent olay) {
        if (olay.getEntity() instanceof Arrow) {
            final Arrow ok = (Arrow) olay.getEntity();
            if (ok.getShooter() instanceof Player) {
                if (this.kontrol.contains(ok.getEntityId())) {
                    new BukkitRunnable() {
                        @Override
                        public void run() {
                            ok.getWorld().createExplosion(ok.getLocation().getX(), ok.getLocation().getY(), ok.getLocation().getZ(), 4F, false, false);
                            this.cancel();
                        }
                    }.runTaskLater(this, 1L);
                    this.kontrol.remove(ok.getEntityId());
                }
            }
        }
    }
 

Krumb069

Nether Yerlisi
Mesajlar
2,151
En iyi cevaplar
1
Beğeniler
506
Puanları
1,250
PHP:
    private List<Integer> kontrol = Lists.newArrayList();
 
    @EventHandler
    private void patlayiciOkAtildiginda(ProjectileLaunchEvent sebep) {
        if (sebep instanceof Arrow) {
            Arrow ok = (Arrow) sebep.getEntity();
            if (ok.getShooter() instanceof Player) {
                Player oyuncu = (Player) ok.getShooter();
                if (oyuncu.getInventory().getItemInHand().hasItemMeta()) {
                    if (oyuncu.getInventory().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("TNTYAY")) {
                        this.kontrol.add(ok.getEntityId());
                    }
                }
            }
        }
    }
 
    @EventHandler(priority = EventPriority.NORMAL)
    private void okPatladiginda(final ProjectileHitEvent olay) {
        if (olay.getEntity() instanceof Arrow) {
            final Arrow ok = (Arrow) olay.getEntity();
            if (ok.getShooter() instanceof Player) {
                if (this.kontrol.contains(ok.getEntityId())) {
                    new BukkitRunnable() {
                        @Override
                        public void run() {
                            ok.getWorld().createExplosion(ok.getLocation().getX(), ok.getLocation().getY(), ok.getLocation().getZ(), 4F, false, false);
                            this.cancel();
                        }
                    }.runTaskLater(this, 1L);
                    this.kontrol.remove(ok.getEntityId());
                }
            }
        }
    }
Bu çalışmadı hata şu kısımda:
Kod:
private List<Integer> kontrol = Lists.newArrayList();
 

efe2002ozyay

Obsidyen Madencisi
Mesajlar
1,321
En iyi cevaplar
0
Beğeniler
547
Puanları
0
/execute @e[type=Arrow] - - - /summon PrimedTnt
/execute @e[type=Arrow] - - - /tp @e[type=PrimedTnt] @e[type=Arrow,r=2]

I Love RedStone
 

Krumb069

Nether Yerlisi
Mesajlar
2,151
En iyi cevaplar
1
Beğeniler
506
Puanları
1,250
/execute @e[type=Arrow] - - - /summon PrimedTnt
/execute @e[type=Arrow] - - - /tp @e[type=PrimedTnt] @e[type=Arrow,r=2]

I Love RedStone
Ben plugin istemiştim :/
Ayrıca adamın elindeki item özel bir yay olmazsa hiçbir işe yaramaz isteyen tnt atar
 

EminGny

İşsiz
Mesajlar
1,276
En iyi cevaplar
0
Beğeniler
1,359
Puanları
0
/execute @e[type=Arrow] - - - /summon PrimedTnt
/execute @e[type=Arrow] - - - /tp @e[type=PrimedTnt] @e[type=Arrow,r=2]

I Love RedStone
-(Bunu bi cloğa bağladıktan 10 saniye sonra)
+AAA server niye çöktü :D
Onun yerine inground:1b olan arrowa scor verip tnt spawnlayıp hemen ardından öldürmek daha mantıklı :D
 

Üst