Create an egg grenade

Discussion in 'Plugin Development' started by MrSnare, Oct 28, 2012.

Thread Status:
Not open for further replies.
  1. Offline

    MrSnare

    I am trying to create a grenade out of an egg.
    It must bounce when it hits the ground and must explode 3 seconds after leaving the players inventory

    This is my code so far can anyone help me finish it?

    public class GrenadeListener implements Listener {

    private static final PlayerEggThrowEvent PlayerEggThrowEvent = null;
    PlayerEggThrowEvent event = PlayerEggThrowEvent;
    TNTPrimed TNT = null;
    ExplosionPrimeEvent nade = new ExplosionPrimeEvent(TNT, 4, true);

    @EventHandler()
    public void eggThrow(PlayerEggThrowEvent event){
    Player p = event.getPlayer();
    event.setHatching(false);
    event.getEgg().setVelocity(p.getLocation().getDirection().normalize().add(new Vector(0,2.5,10)));

    }


    @EventHandler()
    public void eggHit(ProjectileHitEvent event2){
    event2.getEntity().getWorld().createExplosion(event.getEgg().getLocation(), 4);


    }

    }
     
  2. Offline

    xXSniperzzXx_SD

    Normally people would post code using the code option, but this is how i do a grenade, you should be able to just edit this

    Code:
    @EventHandler(priority = EventPriority.NORMAL)
        public void onPlayerThrowEvent(PlayerInteractEvent event){
            Player player = event.getPlayer();
            if(InfectedApi.isPlayer(player))
                if(plugin.getConfig().getBoolean("Grenades.Use"))
                    if (player.getItemInHand().getType() == Material.SLIME_BALL) {
                        final Item grenade = event.getPlayer().getWorld().dropItem(player.getEyeLocation(), new ItemStack(Material.SLIME_BALL));
                        grenade.setVelocity(event.getPlayer().getEyeLocation().getDirection());
                        item.add(grenade.getUniqueId().toString());
                        player.getInventory().removeItem(grenade.getItemStack());
                        Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
                            @Override
                            public void run() {
                                grenade.getWorld().playEffect(grenade.getLocation(), Effect.SMOKE, 5);
                                for(Player ppl : Bukkit.getServer().getOnlinePlayers())
                                    if(InfectedApi.isPlayer(ppl)&&ppl.getLocation().distance(grenade.getLocation())<5){
                                        ppl.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 140, 2));
                                        ppl.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 40, 1));
                                    }
                                grenade.remove();
                                grenade.playEffect(EntityEffect.WOLF_SMOKE);
                                item.remove(grenade.getUniqueId().toString());
                            }
                        }, 80L);
                        event.setCancelled(true);
                        }
               }
        }
    }
     
  3. Offline

    MrSnare

    thanks i will try this. Sorry i am new :D

    Can i ask what is the variable "plugin"?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 29, 2016
  4. Offline

    Remi1115

    In the class we're talking about (GranadeListener), you'll have something like this:
    Code:Java
    1.  
    2. private {NAME_OF_MAIN_CLASS} plugin;
    3. public {NAME_OF_CLASS}({NAME_OF_MAIN_CLASS} instance){
    4. plugin = instance;
    5. }
    6.  

    When making an instance of this class (which you would normally do in the main plugin class), instead of doing:
    Code:Java
    1.  
    2. new GranadeListener();
    3.  

    ...we'll add 'this' in the brackets, so it looks like this:
    Code:Java
    1.  
    2. new GranadeListener(this);
    3.  

    'This' revers to the instance of the main plugin class. That's why we added the name of the main class in the 'plugin' variable.
     
  5. Offline

    MrSnare

    I am completely lost now. Can you check to see if this is right?

    Code:
    package net.minez;
     
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Grenade extends JavaPlugin{
        public void onEnable(){
            getServer().getPluginManager().registerEvents(new GrenadeListener(), this);
        }
     
    }
    Code:
    import org.bukkit.entity.TNTPrimed;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.ExplosionPrimeEvent;
    import org.bukkit.event.entity.ProjectileHitEvent;
    import org.bukkit.event.player.PlayerEggThrowEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.util.Vector;
     
    public class GrenadeListener implements Listener {
        private Grenade plugin;
        public GrenadeListener(Grenade instance){
            plugin = instance;
        }
       
        private static final PlayerEggThrowEvent PlayerEggThrowEvent = null;
        PlayerEggThrowEvent event = PlayerEggThrowEvent;
        TNTPrimed TNT = null;
     
        @EventHandler()
        public void eggThrow(PlayerEggThrowEvent event){
            Player p = event.getPlayer();
            event.setHatching(false);
            final Item grenade = event.getPlayer().getWorld().dropItem(event.getEgg().getLocation(), new ItemStack(Material.EGG));
            grenade.setVelocity(event.getPlayer().getEyeLocation().getDirection());
            p.getInventory().removeItem(grenade.getItemStack());
            grenade.getWorld().createExplosion(grenade.getLocation(), 4);
            plugin.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
     
                public void run() {
                    grenade.getServer().broadcastMessage("This message is broadcast after 3 seconds");
                }
            }, 60L);
     
        }
       
       
    }
     
  6. Offline

    Frkinklown

    Code:
    package me.farkinklown;
     
     
    import org.bukkit.Material;
    import org.bukkit.Sound;
    import org.bukkit.entity.Item;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerEggThrowEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.scheduler.BukkitRunnable;
     
    import me.farkinklown.MAIN_CLASS;
     
    public class PlayerListener implements Listener {
    private MAIN_CLASS plugin;
    MAIN_CLASS configGetter;
     
    public PlayerListener(MAIN_CLASS plugin) {
    this.plugin = plugin;
    plugin.getServer().getPluginManager().registerEvents(this, plugin);
    configGetter = plugin;
     
    }
     
     
    @EventHandler
        public void eggThrow(PlayerEggThrowEvent event){
            event.setHatching(false); // no baby chickens.
            final Item grenade = event.getPlayer().getWorld().dropItem(event.getEgg().getLocation(), new ItemStack(Material.EGG)); //spawn egg at landing location to allow for bounce.
            grenade.setVelocity(event.getPlayer().getEyeLocation().getDirection());
            grenade.getLocation().add(event.getEgg().getVelocity());  //move egg from land location to simulate bounce.
            grenade.getWorld().playSound(grenade.getLocation(),Sound.CREEPER_HISS, 1, 1); // plays creeper his sound when hits the ground, bit of a warning for players.
            grenade.setPickupDelay(41); //Delay so grenade cant be picked up. note: make longer then "runtasklater" delay.
            new BukkitRunnable() {
                @Override
                public void run() {
              grenade.getWorld().createExplosion(grenade.getLocation(), 4, false); // make egg explode (location, size, fire)
                    grenade.remove(); // get rid of egg so it cant be picked up
                }
            }.runTaskLater(this.plugin, 40);
     
        }
     
     
    }
     
     
     
     
    

    im only a very noob at coding, but this is what i have come up with and it seems to be working.

    also i know this is an old post, but i found it useful for most the code, i just tweeked it my way :p
     
Thread Status:
Not open for further replies.

Share This Page