How to get the block where an egg lands

Discussion in 'Plugin Development' started by PieMan456, Dec 2, 2013.

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

    PieMan456

    Hello Everyone,

    I am trying to get the block where an egg lands. I want to do this because I am making a landmine plugin and the block where the egg lands on is the landmine. So how would I do this? This is what I tried but it does not work:
    Code:java
    1. if(egg.hasMetadata("landmine")){
    2. int bx = egg.getLocation().getBlockX();
    3. int by = egg.getLocation().getBlockY();
    4. int bz = egg.getLocation().getBlockZ();
    5. Block b = egg.getWorld().getBlockAt(bx, by, bz);
    6. mine.add(b.getLocation());
    7. return;
    8. }


    Thanks for any help!
     
  2. Offline

    RealDope

    ProjectileHitEvent
     
  3. Offline

    PieMan456

    RealDope
    Yes that code is in the projectile hit event but it still does not work.
     
  4. Offline

    The_Doctor_123

    PieMan456
    Then you must not be registering events or something. Test if the event fires.
     
  5. Offline

    PieMan456

    The_Doctor_123
    Ok here is whole ProjectileHitEvent and it only gets to "Hello 2"
    Code:java
    1. @EventHandler
    2. public void onProjectileHit(ProjectileHitEvent e){
    3. System.out.println("Hello 1");
    4. Projectile p = e.getEntity();
    5. if(!(p instanceof Egg)) return;
    6. System.out.println("Hello 2");
    7. Egg egg = (Egg) p;
    8. if(egg.hasMetadata("grenade")){
    9. System.out.println("Hello 3");
    10. double eggx = egg.getLocation().getX();
    11. double eggy = egg.getLocation().getY();
    12. double eggz = egg.getLocation().getZ();
    13. egg.getWorld().createExplosion(eggx, eggy, eggz, 4F, false, false);
    14. return;
    15. }
    16. if(egg.hasMetadata("landmine")){
    17. System.out.println("Hello");
    18. int bx = egg.getLocation().getBlockX();
    19. int by = egg.getLocation().getBlockY();
    20. int bz = egg.getLocation().getBlockZ();
    21. Block b = egg.getWorld().getBlockAt(bx, by, bz);
    22. mine.add(b.getLocation());
    23. return;
    24. }
    25. if(egg.hasMetadata("bomb")){
    26. System.out.println("Hello 4");
    27. final Player shooter = (Player) egg.getShooter();
    28. final Block b = egg.getLocation().getBlock();
    29. bomb.add(b.getLocation());
    30. Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
    31. public void run(){
    32. if(player.contains(shooter.getName())){
    33. b.getWorld().createExplosion(b.getX(), b.getY(), b.getZ(), 4F, true, true);
    34. bomb.remove(b.getLocation());
    35. Bukkit.getServer().getScheduler().cancelTasks(plugin);
    36. return;
    37. }
    38. shooter.sendMessage(ChatColor.GREEN + "Bomb is going off in 10 seconds!");
    39. player.add(shooter.getName());
    40. }
    41. }, 20 * 10, 20 * 10);
    42. }
    43. }
     
  6. Offline

    fireblast709

    PieMan456 where do you add the metadata?
     
  7. Offline

    PieMan456

    @fireblast70
    Code:java
    1. @EventHandler
    2. public void onPlayerInteract(PlayerInteractEvent e){
    3. if(e.getAction() == Action.RIGHT_CLICK_BLOCK){
    4. if(e.getClickedBlock().getType() != Material.SIGN && e.getClickedBlock().getType() != Material.WALL_SIGN
    5. && e.getClickedBlock().getType() != Material.SIGN_POST) return;
    6. System.out.println("Still Working");
    7. Sign s = (Sign) e.getClickedBlock().getState();
    8. if(s.getLine(0).equalsIgnoreCase(ChatColor.GREEN + "Eggsplosions")){
    9. Player p = (Player) e.getPlayer();
    10. openInventory(p);
    11. }
    12. }
    13. if(e.getAction() == Action.RIGHT_CLICK_BLOCK){
    14. Block b = e.getClickedBlock();
    15. if(bomb.contains(b.getLocation())){
    16. Player p = e.getPlayer();
    17. if(p.getItemInHand().getType() == Material.FLINT_AND_STEEL && p.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "WireCutters")){
    18. p.sendMessage(ChatColor.GREEN + "You have successfully defused the bomb!");
    19. Bukkit.getServer().getScheduler().cancelTasks(plugin);
    20. bomb.remove(b.getLocation());
    21. return;
    22. }
    23. }
    24. }
    25. Vector v1 = e.getPlayer().getEyeLocation().getDirection().multiply(2.0);
    26. if(e.getPlayer().getItemInHand().getType() != Material.EGG) return;
    27. if(e.getAction() != Action.RIGHT_CLICK_AIR) return;
    28. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Grenade")){
    29. e.setCancelled(true);
    30. Egg egg = e.getPlayer().getWorld().spawn(e.getPlayer().getEyeLocation().add(v1.getX(), v1.getY(), v1.getZ()), Egg.class);
    31. egg.setMetadata("grenade", new FixedMetadataValue(this, true));
    32. egg.setVelocity(v1);
    33. return;
    34. }
    35. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "LandMine")){
    36. e.setCancelled(true);
    37. Egg egg = e.getPlayer().getWorld().spawn(e.getPlayer().getEyeLocation().add(v1.getX(), v1.getY(), v1.getZ()), Egg.class);
    38. egg.setMetadata("landmine", new FixedMetadataValue(this, true));
    39. egg.setVelocity(v1);
    40. return;
    41. }
    42. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Bomb")){
    43. e.setCancelled(true);
    44. Egg egg = e.getPlayer().getWorld().spawn(e.getPlayer().getEyeLocation().add(v1.getX(), v1.getY(), v1.getZ()), Egg.class);
    45. egg.setMetadata("bomb", new FixedMetadataValue(this, true));
    46. egg.setVelocity(v1);
    47. return;
    48. }
    49. }

    And another question. (The grenade works but not the other two). When I shoot the grenade it works fine but after I shoot it and i right click a block it shoots another egg for no reason.

    fireblast709
    Tahg didn't work Look up at last post.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 5, 2016
  8. Offline

    ArthurMaker

    I wrote this code for a Splegg that I want to make:

    Code:java
    1. @EventHandler
    2. public void eggHit (ProjectileHitEvent event){
    3. if(event.getEntity() instanceof Egg){
    4. BlockIterator iterator = new BlockIterator(event.getEntity().getWorld(), event.getEntity().getLocation().toVector(), event.getEntity().getVelocity().normalize(), 0.0D, 4);
    5. Block hitBlock = null;
    6.  
    7. while (iterator.hasNext()) {
    8. hitBlock = iterator.next();
    9.  
    10. if (hitBlock.getTypeId() != 0) {
    11. break;
    12. }
    13. }
    14. Location centerLoc = hitBlock.getLocation();
    15. centerLoc.setX((centerLoc.getX()) + 0.5);
    16. centerLoc.setY((centerLoc.getY()) + 0.5);
    17. centerLoc.setZ((centerLoc.getZ()) + 0.5);
    18. hitBlock.getWorld().playSound(centerLoc, Sound.CHICKEN_EGG_POP, 0.5F, 1.0F);
    19. hitBlock.setType(Material.AIR);
    20. Effects.SPELL.play(centerLoc, 0, 1, 0, 1, 10);
    21. }
    22. }


    It works perfectly.
    I got the center location of the block in "centerLoc", but how you can just get the block, you can use "hitBlock.getLocation()".
     
  9. Offline

    PieMan456

    ArthurMaker
    So do I need any of this?
    Code:java
    1. centerLoc.setX((centerLoc.getX()) + 0.5);
    2. centerLoc.setY((centerLoc.getY()) + 0.5);
    3. centerLoc.setZ((centerLoc.getZ()) + 0.5);
     
  10. Offline

    ArthurMaker


    Actually, nope.
    You will just need it if you want to do an effect in a perfect position. xD
    The same thing for the line below - you just need the "hitBlock.getLocation()".
    Code:java
    1. Location centerLoc = hitBlock.getLocation();
     
  11. Offline

    PieMan456

    ArthurMaker
    It still does not work.

    Here is my whole class:
    Code:java
    1. package me.pieman.eggs;
    2.  
    3. import java.util.ArrayList;
    4.  
    5. import net.milkbowl.vault.economy.Economy;
    6.  
    7. import org.bukkit.Bukkit;
    8. import org.bukkit.ChatColor;
    9. import org.bukkit.Location;
    10. import org.bukkit.Material;
    11. import org.bukkit.Sound;
    12. import org.bukkit.block.Block;
    13. import org.bukkit.block.Sign;
    14. import org.bukkit.entity.Egg;
    15. import org.bukkit.entity.Player;
    16. import org.bukkit.entity.Projectile;
    17. import org.bukkit.event.EventHandler;
    18. import org.bukkit.event.Listener;
    19. import org.bukkit.event.block.Action;
    20. import org.bukkit.event.entity.ProjectileHitEvent;
    21. import org.bukkit.event.inventory.InventoryClickEvent;
    22. import org.bukkit.event.player.PlayerEggThrowEvent;
    23. import org.bukkit.event.player.PlayerInteractEvent;
    24. import org.bukkit.event.player.PlayerMoveEvent;
    25. import org.bukkit.inventory.Inventory;
    26. import org.bukkit.inventory.ItemStack;
    27. import org.bukkit.inventory.meta.ItemMeta;
    28. import org.bukkit.metadata.FixedMetadataValue;
    29. import org.bukkit.plugin.RegisteredServiceProvider;
    30. import org.bukkit.plugin.java.JavaPlugin;
    31. import org.bukkit.util.BlockIterator;
    32. import org.bukkit.util.Vector;
    33.  
    34. public class Eggs extends JavaPlugin implements Listener {
    35.  
    36. public Eggs plugin;
    37.  
    38. public ArrayList<String> player = new ArrayList<String>();
    39.  
    40. public ArrayList<Location> mine = new ArrayList<Location>();
    41.  
    42. public ArrayList<Location> bomb = new ArrayList<Location>();
    43.  
    44. public static Economy econ = null;
    45.  
    46. public void onEnable(){
    47. Bukkit.getServer().getPluginManager().registerEvents(this, this);
    48. if (!setupEconomy() ) {
    49. getLogger().severe(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName()));
    50. getServer().getPluginManager().disablePlugin(this);
    51. return;
    52. }
    53. }
    54.  
    55. private boolean setupEconomy() {
    56. if (getServer().getPluginManager().getPlugin("Vault") == null) {
    57. return false;
    58. }
    59. RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
    60. if (rsp == null) {
    61. return false;
    62. }
    63. econ = rsp.getProvider();
    64. return econ != null;
    65. }
    66.  
    67. @SuppressWarnings("deprecation")
    68. @EventHandler
    69. public void onProjectileHit(ProjectileHitEvent e){
    70. Projectile p = e.getEntity();
    71. if(!(p instanceof Egg)) return;
    72. Egg egg = (Egg) p;
    73. if(egg.hasMetadata("grenade")){
    74. double eggx = egg.getLocation().getX();
    75. double eggy = egg.getLocation().getY();
    76. double eggz = egg.getLocation().getZ();
    77. egg.getWorld().createExplosion(eggx, eggy, eggz, 4F, false, false);
    78. return;
    79. }
    80. if(egg.hasMetadata("landmine")){
    81. BlockIterator iterator = new BlockIterator(e.getEntity().getWorld(), e.getEntity().getLocation().toVector(), e.getEntity().getVelocity().normalize(), 0.0D, 4);
    82. Block hitBlock = null;
    83. while (iterator.hasNext()) {
    84. hitBlock = iterator.next();
    85.  
    86. if (hitBlock.getTypeId() != 0) {
    87. break;
    88. }
    89. }
    90. Location loc = (Location) hitBlock.getLocation();
    91. loc.getWorld().playSound(loc, Sound.EXPLODE, 5.0F, 5.0F);
    92. mine.add(loc);
    93. return;
    94. }
    95. if(egg.hasMetadata("bomb")){
    96. final Player shooter = (Player) egg.getShooter();
    97. final Block b = egg.getLocation().getBlock();
    98. bomb.add(b.getLocation());
    99. Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
    100. public void run(){
    101. if(player.contains(shooter.getName())){
    102. b.getWorld().createExplosion(b.getX(), b.getY(), b.getZ(), 4F, true, true);
    103. bomb.remove(b.getLocation());
    104. Bukkit.getServer().getScheduler().cancelTasks(plugin);
    105. return;
    106. }
    107. shooter.sendMessage(ChatColor.GREEN + "Bomb is going off in 10 seconds!");
    108. player.add(shooter.getName());
    109. }
    110. }, 20 * 10, 20 * 10);
    111. }
    112. }
    113.  
    114. @EventHandler
    115. public void onPlayerMove(PlayerMoveEvent e){
    116. Player p = e.getPlayer();
    117. ArrayList<Location> mine = this.mine;
    118. for(Location mloc : mine){
    119. Location ploc = p.getLocation();
    120. if(ploc.getX() == mloc.getX() && ploc.getY() == mloc.getY() && ploc.getX() == mloc.getX()){
    121. mloc.getWorld().createExplosion(ploc.getX(), ploc.getY(), ploc.getZ(), 4F, false, false);
    122. mine.remove(mloc);
    123. }
    124. }
    125. }
    126.  
    127. @SuppressWarnings("deprecation")
    128. public void openInventory(Player p){
    129. Inventory inv = Bukkit.createInventory(null, 9, "Bomb Factory");
    130.  
    131. ItemStack grenade = new ItemStack(Material.EGG);
    132. ItemMeta gmeta = grenade.getItemMeta();
    133. ArrayList<String> g = new ArrayList<String>();
    134. g.add(ChatColor.DARK_AQUA + "Cost: " + getConfig().getDouble("grenadeprice"));
    135. gmeta.setLore(g);
    136. gmeta.setDisplayName(ChatColor.GREEN + "Grenade");
    137. grenade.setItemMeta(gmeta);
    138.  
    139. ItemStack bomb = new ItemStack(Material.EGG);
    140. ItemMeta bmeta = bomb.getItemMeta();
    141. ArrayList<String> b = new ArrayList<String>();
    142. b.add(ChatColor.DARK_AQUA + "Cost: " + getConfig().getDouble("bombprice"));
    143. bmeta.setLore(b);
    144. bmeta.setDisplayName(ChatColor.GREEN + "Bomb");
    145. bomb.setItemMeta(bmeta);
    146.  
    147. ItemStack landmine = new ItemStack(Material.EGG);
    148. ItemMeta lmeta = landmine.getItemMeta();
    149. ArrayList<String> l = new ArrayList<String>();
    150. l.add(ChatColor.DARK_AQUA + "Cost: " + getConfig().getDouble("landmineprice"));
    151. lmeta.setLore(l);
    152. lmeta.setDisplayName(ChatColor.GREEN + "LandMine");
    153. landmine.setItemMeta(lmeta);
    154.  
    155. ItemStack wirecutters = new ItemStack(Material.FLINT_AND_STEEL);
    156. ItemMeta wmeta = wirecutters.getItemMeta();
    157. ArrayList<String> w = new ArrayList<String>();
    158. w.add(ChatColor.DARK_AQUA + "Cost: " + getConfig().getDouble("wirecuttersprice"));
    159. wmeta.setLore(w);
    160. wmeta.setDisplayName(ChatColor.GREEN + "WireCutters");
    161. wirecutters.setItemMeta(wmeta);
    162.  
    163. ItemStack money = new ItemStack(Material.DIAMOND);
    164. ItemMeta mmeta = money.getItemMeta();
    165. mmeta.setDisplayName(ChatColor.DARK_PURPLE + "Balance: " + econ.getBalance(p.getName()));
    166. money.setItemMeta(mmeta);
    167.  
    168. p.openInventory(inv);
    169.  
    170. inv.clear();
    171. inv.setItem(0, new ItemStack(grenade));
    172. inv.setItem(2, new ItemStack(bomb));
    173. inv.setItem(4, new ItemStack(money));
    174. inv.setItem(6, new ItemStack(landmine));
    175. inv.setItem(8, new ItemStack(wirecutters));
    176.  
    177. p.updateInventory();
    178. }
    179.  
    180. @EventHandler
    181. public void onEggThrow(PlayerEggThrowEvent e){
    182. if(e.getEgg().hasMetadata("grenade")){
    183. e.setHatching(false);
    184. }
    185. if(e.getEgg().hasMetadata("landmine")){
    186. e.setHatching(false);
    187. }
    188. if(e.getEgg().hasMetadata("bomb")){
    189. e.setHatching(false);
    190. }
    191. }
    192.  
    193. @EventHandler
    194. public void onInventoryClick(InventoryClickEvent e){
    195. if(!e.getInventory().getName().equalsIgnoreCase("Bomb Factory")) return;
    196. if(!(e.getWhoClicked() instanceof Player)) return;
    197. Player p = (Player) e.getWhoClicked();
    198. if (p.getInventory().firstEmpty() == -1) {
    199. p.sendMessage(ChatColor.RED + "Your inventory is full!");
    200. return;
    201. }
    202. if(e.getCurrentItem().getType() == Material.DIAMOND){
    203. e.setCancelled(true);
    204. }
    205. if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Grenade")){
    206. e.setCancelled(true);
    207. if(econ.getBalance(p.getName()) < getConfig().getDouble("grenadeprice")){
    208. p.sendMessage(ChatColor.RED + "You do not have enough money!");
    209. return;
    210. } else {
    211. ItemStack grenade = new ItemStack(Material.EGG);
    212. ItemMeta gmeta = grenade.getItemMeta();
    213. gmeta.setDisplayName(ChatColor.GREEN + "Grenade");
    214. grenade.setItemMeta(gmeta);
    215. p.getInventory().addItem(new ItemStack(grenade));
    216. econ.withdrawPlayer(p.getName(), getConfig().getDouble("grenadeprice"));
    217. }
    218. }
    219. if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Bomb")){
    220. e.setCancelled(true);
    221. if(econ.getBalance(p.getName()) < getConfig().getDouble("bombprice")){
    222. p.sendMessage(ChatColor.RED + "You do not have enough money!");
    223. return;
    224. } else {
    225. ItemStack bomb = new ItemStack(Material.EGG);
    226. ItemMeta bmeta = bomb.getItemMeta();
    227. bmeta.setDisplayName(ChatColor.GREEN + "Bomb");
    228. bomb.setItemMeta(bmeta);
    229. p.getInventory().addItem(new ItemStack(bomb));
    230. econ.withdrawPlayer(p.getName(), getConfig().getDouble("bombprice"));
    231. }
    232. }
    233. if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "LandMine")){
    234. e.setCancelled(true);
    235. if(econ.getBalance(p.getName()) < getConfig().getDouble("landmineprice")){
    236. p.sendMessage(ChatColor.RED + "You do not have enough money!");
    237. return;
    238. } else {
    239. ItemStack landmine = new ItemStack(Material.EGG);
    240. ItemMeta lmeta = landmine.getItemMeta();
    241. lmeta.setDisplayName(ChatColor.GREEN + "LandMine");
    242. landmine.setItemMeta(lmeta);
    243. p.getInventory().addItem(new ItemStack(landmine));
    244. econ.withdrawPlayer(p.getName(), getConfig().getDouble("landmineprice"));
    245. }
    246. }
    247. if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "WireCutters")){
    248. e.setCancelled(true);
    249. if(econ.getBalance(p.getName()) < getConfig().getDouble("wirecuttersprice")){
    250. p.sendMessage(ChatColor.RED + "You do not have enough money!");
    251. return;
    252. } else {
    253. ItemStack wirecutters = new ItemStack(Material.FLINT_AND_STEEL);
    254. ItemMeta wmeta = wirecutters.getItemMeta();
    255. wmeta.setDisplayName(ChatColor.GREEN + "WireCutters");
    256. wirecutters.setItemMeta(wmeta);
    257. p.getInventory().addItem(new ItemStack(wirecutters));
    258. econ.withdrawPlayer(p.getName(), getConfig().getDouble("landmineprice"));
    259. }
    260. }
    261. }
    262.  
    263. @EventHandler
    264. public void onPlayerInteract(PlayerInteractEvent e){
    265. if(e.getAction() == Action.RIGHT_CLICK_BLOCK){
    266. if(e.getClickedBlock().getType() != Material.SIGN && e.getClickedBlock().getType() != Material.WALL_SIGN
    267. && e.getClickedBlock().getType() != Material.SIGN_POST) return;
    268. System.out.println("Still Working");
    269. Sign s = (Sign) e.getClickedBlock().getState();
    270. if(s.getLine(0).equalsIgnoreCase(ChatColor.GREEN + "Eggsplosions")){
    271. Player p = (Player) e.getPlayer();
    272. openInventory(p);
    273. }
    274. }
    275. if(e.getAction() == Action.RIGHT_CLICK_BLOCK){
    276. Block b = e.getClickedBlock();
    277. if(bomb.contains(b.getLocation())){
    278. Player p = e.getPlayer();
    279. if(p.getItemInHand().getType() == Material.FLINT_AND_STEEL && p.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "WireCutters")){
    280. p.sendMessage(ChatColor.GREEN + "You have successfully defused the bomb!");
    281. Bukkit.getServer().getScheduler().cancelTasks(plugin);
    282. bomb.remove(b.getLocation());
    283. return;
    284. }
    285. }
    286. }
    287. Vector v1 = e.getPlayer().getEyeLocation().getDirection().multiply(2.0);
    288. if(e.getPlayer().getItemInHand().getType() != Material.EGG) return;
    289. if(e.getAction() != Action.RIGHT_CLICK_AIR) return;
    290. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Grenade")){
    291. e.setCancelled(true);
    292. Egg egg = e.getPlayer().getWorld().spawn(e.getPlayer().getEyeLocation().add(v1.getX(), v1.getY(), v1.getZ()), Egg.class);
    293. egg.setMetadata("grenade", new FixedMetadataValue(this, true));
    294. egg.setVelocity(v1);
    295. return;
    296. }
    297. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "LandMine")){
    298. e.setCancelled(true);
    299. Egg egg = e.getPlayer().getWorld().spawn(e.getPlayer().getEyeLocation().add(v1.getX(), v1.getY(), v1.getZ()), Egg.class);
    300. egg.setMetadata("landmine", new FixedMetadataValue(this, true));
    301. egg.setVelocity(v1);
    302. return;
    303. }
    304. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Bomb")){
    305. e.setCancelled(true);
    306. Egg egg = e.getPlayer().getWorld().spawn(e.getPlayer().getEyeLocation().add(v1.getX(), v1.getY(), v1.getZ()), Egg.class);
    307. egg.setMetadata("bomb", new FixedMetadataValue(this, true));
    308. egg.setVelocity(v1);
    309. return;
    310. }
    311. }
    312. }
    313.  


    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 5, 2016
  12. Offline

    ArthurMaker

    Use it:

    Code:java
    1. if(egg.hasMetadata("landmine")){
    2. BlockIterator iterator = new BlockIterator(e.getEntity().getWorld(), e.getEntity().getLocation().toVector(), e.getEntity().getVelocity().normalize(), 0.0D, 4);
    3. Block hitBlock = null;
    4. while (iterator.hasNext()) {
    5. hitBlock = iterator.next();
    6.  
    7. if (hitBlock.getTypeId() != 0) {
    8. break;
    9. }
    10. }
    11. hitBlock.getLocation().getWorld().playSound(hitBlock.getLocation(), Sound.EXPLODE, 1.5F, 5.0F);
    12. mine.add(hitBlock.getLocation());
    13. return;
    14. }


    No, wait, I understood what you want do.
    Wait, I'll post the code.

    Code:java
    1. if(egg.hasMetadata("landmine")){
    2. BlockIterator iterator = new BlockIterator(e.getEntity().getWorld(), e.getEntity().getLocation().toVector(), e.getEntity().getVelocity().normalize(), 0.0D, 4);
    3. Block hitBlock = null;
    4. while (iterator.hasNext()) {
    5. hitBlock = iterator.next();
    6.  
    7. if (hitBlock.getTypeId() != 0) {
    8. break;
    9. }
    10. }
    11. Location mineLoc = hitBlock.getLocation();
    12. mineLoc.setY((mineLoc.getY()) + 1.5);
    13. mineLoc.getWorld().playSound(hitBlock.getLocation(), Sound.EXPLODE, 1.5F, 5.0F);
    14. mine.add(mineLoc);
    15. return;
    16. }


    Done. It will work perfectly. ;)

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 5, 2016
  13. Offline

    PieMan456

    ArthurMaker
    It still does not work. Is there something wrong with my playermoveevent?

    ArthurMaker
    Wait i didn't see your last post.

    ArthurMaker
    Does not work. I even added debug lines to make sure everything is going through and everything is. What the heck am I supposed to do? If you want to try my code and try to fix it here it is:
    Code:java
    1. package me.pieman.eggs;
    2.  
    3. import java.util.ArrayList;
    4.  
    5. import net.milkbowl.vault.economy.Economy;
    6.  
    7. import org.bukkit.Bukkit;
    8. import org.bukkit.ChatColor;
    9. import org.bukkit.Location;
    10. import org.bukkit.Material;
    11. import org.bukkit.Sound;
    12. import org.bukkit.block.Block;
    13. import org.bukkit.block.Sign;
    14. import org.bukkit.entity.Egg;
    15. import org.bukkit.entity.Player;
    16. import org.bukkit.entity.Projectile;
    17. import org.bukkit.event.EventHandler;
    18. import org.bukkit.event.Listener;
    19. import org.bukkit.event.block.Action;
    20. import org.bukkit.event.entity.ProjectileHitEvent;
    21. import org.bukkit.event.inventory.InventoryClickEvent;
    22. import org.bukkit.event.player.PlayerEggThrowEvent;
    23. import org.bukkit.event.player.PlayerInteractEvent;
    24. import org.bukkit.event.player.PlayerMoveEvent;
    25. import org.bukkit.inventory.Inventory;
    26. import org.bukkit.inventory.ItemStack;
    27. import org.bukkit.inventory.meta.ItemMeta;
    28. import org.bukkit.metadata.FixedMetadataValue;
    29. import org.bukkit.plugin.RegisteredServiceProvider;
    30. import org.bukkit.plugin.java.JavaPlugin;
    31. import org.bukkit.util.BlockIterator;
    32. import org.bukkit.util.Vector;
    33.  
    34. public class Eggs extends JavaPlugin implements Listener {
    35.  
    36. public Eggs plugin;
    37.  
    38. public ArrayList<String> player = new ArrayList<String>();
    39.  
    40. public ArrayList<Location> mine = new ArrayList<Location>();
    41.  
    42. public ArrayList<Location> bomb = new ArrayList<Location>();
    43.  
    44. public static Economy econ = null;
    45.  
    46. public void onEnable(){
    47. Bukkit.getServer().getPluginManager().registerEvents(this, this);
    48. if (!setupEconomy() ) {
    49. getLogger().severe(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName()));
    50. getServer().getPluginManager().disablePlugin(this);
    51. return;
    52. }
    53. }
    54.  
    55. private boolean setupEconomy() {
    56. if (getServer().getPluginManager().getPlugin("Vault") == null) {
    57. return false;
    58. }
    59. RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
    60. if (rsp == null) {
    61. return false;
    62. }
    63. econ = rsp.getProvider();
    64. return econ != null;
    65. }
    66.  
    67. @SuppressWarnings("deprecation")
    68. @EventHandler
    69. public void onProjectileHit(ProjectileHitEvent e){
    70. Projectile p = e.getEntity();
    71. if(!(p instanceof Egg)) return;
    72. Egg egg = (Egg) p;
    73. if(egg.hasMetadata("grenade")){
    74. double eggx = egg.getLocation().getX();
    75. double eggy = egg.getLocation().getY();
    76. double eggz = egg.getLocation().getZ();
    77. egg.getWorld().createExplosion(eggx, eggy, eggz, 4F, false, false);
    78. return;
    79. }
    80. if(egg.hasMetadata("landmine")){
    81. BlockIterator iterator = new BlockIterator(e.getEntity().getWorld(), e.getEntity().getLocation().toVector(), e.getEntity().getVelocity().normalize(), 0.0D, 4);
    82. Block hitBlock = null;
    83. while (iterator.hasNext()) {
    84. hitBlock = iterator.next();
    85.  
    86. if (hitBlock.getTypeId() != 0) {
    87. break;
    88. }
    89. }
    90. Location mineLoc = hitBlock.getLocation();
    91. mineLoc.setY((mineLoc.getY()) + 1.5);
    92. mineLoc.getWorld().playSound(hitBlock.getLocation(), Sound.EXPLODE, 1.5F, 5.0F);
    93. mine.add(mineLoc);
    94. return;
    95. }
    96. if(egg.hasMetadata("bomb")){
    97. final Player shooter = (Player) egg.getShooter();
    98. final Block b = egg.getLocation().getBlock();
    99. bomb.add(b.getLocation());
    100. Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
    101. public void run(){
    102. if(player.contains(shooter.getName())){
    103. b.getWorld().createExplosion(b.getX(), b.getY(), b.getZ(), 4F, true, true);
    104. bomb.remove(b.getLocation());
    105. Bukkit.getServer().getScheduler().cancelTasks(plugin);
    106. return;
    107. }
    108. shooter.sendMessage(ChatColor.GREEN + "Bomb is going off in 10 seconds!");
    109. player.add(shooter.getName());
    110. }
    111. }, 20 * 10, 20 * 10);
    112. }
    113. }
    114.  
    115. @EventHandler
    116. public void onPlayerMove(PlayerMoveEvent e){
    117. Player p = e.getPlayer();
    118. ArrayList<Location> mine = this.mine;
    119. for(Location mloc : mine){
    120. Location ploc = p.getLocation();
    121. if(ploc.getX() == mloc.getX() && ploc.getY() == mloc.getY() && ploc.getX() == mloc.getX()){
    122. mloc.getWorld().createExplosion(ploc.getX(), ploc.getY(), ploc.getZ(), 4F, false, false);
    123. mine.remove(mloc);
    124. }
    125. }
    126. }
    127.  
    128. @SuppressWarnings("deprecation")
    129. public void openInventory(Player p){
    130. Inventory inv = Bukkit.createInventory(null, 9, "Bomb Factory");
    131.  
    132. ItemStack grenade = new ItemStack(Material.EGG);
    133. ItemMeta gmeta = grenade.getItemMeta();
    134. ArrayList<String> g = new ArrayList<String>();
    135. g.add(ChatColor.DARK_AQUA + "Cost: " + getConfig().getDouble("grenadeprice"));
    136. gmeta.setLore(g);
    137. gmeta.setDisplayName(ChatColor.GREEN + "Grenade");
    138. grenade.setItemMeta(gmeta);
    139.  
    140. ItemStack bomb = new ItemStack(Material.EGG);
    141. ItemMeta bmeta = bomb.getItemMeta();
    142. ArrayList<String> b = new ArrayList<String>();
    143. b.add(ChatColor.DARK_AQUA + "Cost: " + getConfig().getDouble("bombprice"));
    144. bmeta.setLore(b);
    145. bmeta.setDisplayName(ChatColor.GREEN + "Bomb");
    146. bomb.setItemMeta(bmeta);
    147.  
    148. ItemStack landmine = new ItemStack(Material.EGG);
    149. ItemMeta lmeta = landmine.getItemMeta();
    150. ArrayList<String> l = new ArrayList<String>();
    151. l.add(ChatColor.DARK_AQUA + "Cost: " + getConfig().getDouble("landmineprice"));
    152. lmeta.setLore(l);
    153. lmeta.setDisplayName(ChatColor.GREEN + "LandMine");
    154. landmine.setItemMeta(lmeta);
    155.  
    156. ItemStack wirecutters = new ItemStack(Material.FLINT_AND_STEEL);
    157. ItemMeta wmeta = wirecutters.getItemMeta();
    158. ArrayList<String> w = new ArrayList<String>();
    159. w.add(ChatColor.DARK_AQUA + "Cost: " + getConfig().getDouble("wirecuttersprice"));
    160. wmeta.setLore(w);
    161. wmeta.setDisplayName(ChatColor.GREEN + "WireCutters");
    162. wirecutters.setItemMeta(wmeta);
    163.  
    164. ItemStack money = new ItemStack(Material.DIAMOND);
    165. ItemMeta mmeta = money.getItemMeta();
    166. mmeta.setDisplayName(ChatColor.DARK_PURPLE + "Balance: " + econ.getBalance(p.getName()));
    167. money.setItemMeta(mmeta);
    168.  
    169. p.openInventory(inv);
    170.  
    171. inv.clear();
    172. inv.setItem(0, new ItemStack(grenade));
    173. inv.setItem(2, new ItemStack(bomb));
    174. inv.setItem(4, new ItemStack(money));
    175. inv.setItem(6, new ItemStack(landmine));
    176. inv.setItem(8, new ItemStack(wirecutters));
    177.  
    178. p.updateInventory();
    179. }
    180.  
    181. @EventHandler
    182. public void onEggThrow(PlayerEggThrowEvent e){
    183. if(e.getEgg().hasMetadata("grenade")){
    184. e.setHatching(false);
    185. }
    186. if(e.getEgg().hasMetadata("landmine")){
    187. e.setHatching(false);
    188. }
    189. if(e.getEgg().hasMetadata("bomb")){
    190. e.setHatching(false);
    191. }
    192. }
    193.  
    194. @EventHandler
    195. public void onInventoryClick(InventoryClickEvent e){
    196. if(!e.getInventory().getName().equalsIgnoreCase("Bomb Factory")) return;
    197. if(!(e.getWhoClicked() instanceof Player)) return;
    198. Player p = (Player) e.getWhoClicked();
    199. if (p.getInventory().firstEmpty() == -1) {
    200. p.sendMessage(ChatColor.RED + "Your inventory is full!");
    201. return;
    202. }
    203. if(e.getCurrentItem().getType() == Material.DIAMOND){
    204. e.setCancelled(true);
    205. }
    206. if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Grenade")){
    207. e.setCancelled(true);
    208. if(econ.getBalance(p.getName()) < getConfig().getDouble("grenadeprice")){
    209. p.sendMessage(ChatColor.RED + "You do not have enough money!");
    210. return;
    211. } else {
    212. ItemStack grenade = new ItemStack(Material.EGG);
    213. ItemMeta gmeta = grenade.getItemMeta();
    214. gmeta.setDisplayName(ChatColor.GREEN + "Grenade");
    215. grenade.setItemMeta(gmeta);
    216. p.getInventory().addItem(new ItemStack(grenade));
    217. econ.withdrawPlayer(p.getName(), getConfig().getDouble("grenadeprice"));
    218. }
    219. }
    220. if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Bomb")){
    221. e.setCancelled(true);
    222. if(econ.getBalance(p.getName()) < getConfig().getDouble("bombprice")){
    223. p.sendMessage(ChatColor.RED + "You do not have enough money!");
    224. return;
    225. } else {
    226. ItemStack bomb = new ItemStack(Material.EGG);
    227. ItemMeta bmeta = bomb.getItemMeta();
    228. bmeta.setDisplayName(ChatColor.GREEN + "Bomb");
    229. bomb.setItemMeta(bmeta);
    230. p.getInventory().addItem(new ItemStack(bomb));
    231. econ.withdrawPlayer(p.getName(), getConfig().getDouble("bombprice"));
    232. }
    233. }
    234. if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "LandMine")){
    235. e.setCancelled(true);
    236. if(econ.getBalance(p.getName()) < getConfig().getDouble("landmineprice")){
    237. p.sendMessage(ChatColor.RED + "You do not have enough money!");
    238. return;
    239. } else {
    240. ItemStack landmine = new ItemStack(Material.EGG);
    241. ItemMeta lmeta = landmine.getItemMeta();
    242. lmeta.setDisplayName(ChatColor.GREEN + "LandMine");
    243. landmine.setItemMeta(lmeta);
    244. p.getInventory().addItem(new ItemStack(landmine));
    245. econ.withdrawPlayer(p.getName(), getConfig().getDouble("landmineprice"));
    246. }
    247. }
    248. if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "WireCutters")){
    249. e.setCancelled(true);
    250. if(econ.getBalance(p.getName()) < getConfig().getDouble("wirecuttersprice")){
    251. p.sendMessage(ChatColor.RED + "You do not have enough money!");
    252. return;
    253. } else {
    254. ItemStack wirecutters = new ItemStack(Material.FLINT_AND_STEEL);
    255. ItemMeta wmeta = wirecutters.getItemMeta();
    256. wmeta.setDisplayName(ChatColor.GREEN + "WireCutters");
    257. wirecutters.setItemMeta(wmeta);
    258. p.getInventory().addItem(new ItemStack(wirecutters));
    259. econ.withdrawPlayer(p.getName(), getConfig().getDouble("landmineprice"));
    260. }
    261. }
    262. }
    263.  
    264. @EventHandler
    265. public void onPlayerInteract(PlayerInteractEvent e){
    266. if(e.getAction() == Action.RIGHT_CLICK_BLOCK){
    267. if(e.getClickedBlock().getType() != Material.SIGN && e.getClickedBlock().getType() != Material.WALL_SIGN
    268. && e.getClickedBlock().getType() != Material.SIGN_POST) return;
    269. System.out.println("Still Working");
    270. Sign s = (Sign) e.getClickedBlock().getState();
    271. if(s.getLine(0).equalsIgnoreCase(ChatColor.GREEN + "Eggsplosions")){
    272. Player p = (Player) e.getPlayer();
    273. openInventory(p);
    274. }
    275. }
    276. if(e.getAction() == Action.RIGHT_CLICK_BLOCK){
    277. Block b = e.getClickedBlock();
    278. if(bomb.contains(b.getLocation())){
    279. Player p = e.getPlayer();
    280. if(p.getItemInHand().getType() == Material.FLINT_AND_STEEL && p.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "WireCutters")){
    281. p.sendMessage(ChatColor.GREEN + "You have successfully defused the bomb!");
    282. Bukkit.getServer().getScheduler().cancelTasks(plugin);
    283. bomb.remove(b.getLocation());
    284. return;
    285. }
    286. }
    287. }
    288. Vector v1 = e.getPlayer().getEyeLocation().getDirection().multiply(2.0);
    289. if(e.getPlayer().getItemInHand().getType() != Material.EGG) return;
    290. if(e.getAction() != Action.RIGHT_CLICK_AIR) return;
    291. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Grenade")){
    292. e.setCancelled(true);
    293. Egg egg = e.getPlayer().getWorld().spawn(e.getPlayer().getEyeLocation().add(v1.getX(), v1.getY(), v1.getZ()), Egg.class);
    294. egg.setMetadata("grenade", new FixedMetadataValue(this, true));
    295. egg.setVelocity(v1);
    296. return;
    297. }
    298. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "LandMine")){
    299. e.setCancelled(true);
    300. Egg egg = e.getPlayer().getWorld().spawn(e.getPlayer().getEyeLocation().add(v1.getX(), v1.getY(), v1.getZ()), Egg.class);
    301. egg.setMetadata("landmine", new FixedMetadataValue(this, true));
    302. egg.setVelocity(v1);
    303. return;
    304. }
    305. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Bomb")){
    306. e.setCancelled(true);
    307. Egg egg = e.getPlayer().getWorld().spawn(e.getPlayer().getEyeLocation().add(v1.getX(), v1.getY(), v1.getZ()), Egg.class);
    308. egg.setMetadata("bomb", new FixedMetadataValue(this, true));
    309. egg.setVelocity(v1);
    310. return;
    311. }
    312. }
    313. }
    314.  


    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 5, 2016
  14. Offline

    ArthurMaker

    My bad, I think I found the error:
    Replace:

    Code:java
    1. mineLoc.setY((mineLoc.getY()) + 1.5);


    for this:

    Code:java
    1. mineLoc.setY((mineLoc.getY()) + 1);
     
  15. Offline

    PieMan456

    ArthurMaker
    Nope doesn't fix it. Maybe it is something wrong with my PlayerMoveEvent? Because it still does not create the explosion.
     
  16. Offline

    ArthurMaker


    That is weird...
    I'll think some possibilites here... Brb

    Well, replace the:
    Code:java
    1. mineLoc.setY((mineLoc.getY()) + 1.0);

    for:
    Code:java
    1. mineLoc.setY((mineLoc.getY()) + 1.5);

    And replace your PlayerMoveEvent for this:
    Code:java
    1. @EventHandler
    2. public void onPlayerMove(PlayerMoveEvent e){
    3. Player p = e.getPlayer();
    4. ArrayList<Location> mine = this.mine;
    5. for(Location mloc : mine){
    6. Location ploc = p.getLocation();
    7. int pX = (int) ploc.getX();
    8. int pY = (int) ploc.getY();
    9. int pZ = (int) ploc.getZ();
    10. if((pX == (int) mloc.getX()) && (pY == (int) mloc.getY()) && (pZ == (int) mloc.getX())){
    11. mloc.getWorld().createExplosion(ploc.getX(), ploc.getY(), ploc.getZ(), 4F, false, false);
    12. mine.remove(mloc);
    13. }
    14. }
    15. }


    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 5, 2016
  17. Offline

    M0n0clink

    PieMan456

    Change
    Code:java
    1. mloc.getWorld().createExplosion(ploc.getX(), ploc.getY(), ploc.getZ(), 4F, false, false);

    into
    Code:java
    1. mloc.getWorld().createExplosion(ploc, 4F);
     
  18. Offline

    fireblast709

    M0n0clink Wouldn't matter. In fact, his version disables any damage done to the environment.
     
  19. Offline

    PieMan456

  20. Offline

    ArthurMaker

  21. Offline

    PieMan456

    ArthurMaker
    Do you know any super smart coders that might know how to do this that I could tag?
     
  22. Offline

    xTrollxDudex

    ME!

    You should not be debugging by sending random messages, you should debug the ProjectileHitEvent code by printing out the string version of the location.

    Here is a method you can use to convert a location to a string:
    PHP:
    public String locToString(Location loc) {
        return 
    String.valueOf(loc.getX()) + String.valueOf(loc.getY()) + String.valueOf(loc.getZ());
    }
     
    //use
    e.getPlayer().sendMessage(locToString(mineLoc));
    Then you can check if the location you move to is the location printed on the screen. By the way, that PlayerMoveEvent will cause lag.
     
  23. Offline

    PieMan456

    xTrollxDudex
    But I want to make an explosion not send a message.
     
  24. Offline

    xTrollxDudex

    PieMan456
    I never said anything about that
     
  25. Offline

    PieMan456

    So no one knows how to do this?

    Bump.

    Bump.

    JPG2000
    Do you know how to do this?
     
  26. Offline

    JPG2000

    PieMan456 Assuming you have the egg object:
    Code:java
    1. Block b = egg.getLocation().getBlock();


    Wouldn't that be it? Have you tried this yet?
     
Thread Status:
Not open for further replies.

Share This Page