Solved Hook Grenade

Discussion in 'Plugin Development' started by Worthless_Hobo, Aug 24, 2014.

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

    Worthless_Hobo

    Im trying to make a grenade type thing that when thrown, teleports certain entities around it in front of the player. What I have right now throws the grenade, does not cause any console errors, but does not teleport anything. Any help would be appreciated.

    Code:java
    1. import org.bukkit.Bukkit;
    2. import org.bukkit.ChatColor;
    3. import org.bukkit.Location;
    4. import org.bukkit.Material;
    5. import org.bukkit.World;
    6. import org.bukkit.entity.Entity;
    7. import org.bukkit.entity.EntityType;
    8. import org.bukkit.entity.Item;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.block.Action;
    13. import org.bukkit.event.player.PlayerInteractEvent;
    14. import org.bukkit.inventory.ItemStack;
    15.  
    16. import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
    17. import com.sk89q.worldguard.protection.ApplicableRegionSet;
    18. import com.sk89q.worldguard.protection.flags.DefaultFlag;
    19. import com.sk89q.worldguard.protection.flags.StateFlag.State;
    20.  
    21. public class Hook implements Listener {
    22.  
    23. public static String getCardinalDirection(Player player) {
    24. double rotation = (player.getLocation().getYaw() - 180) % 360;
    25. if (rotation < 0) {
    26. rotation += 360.0;
    27. }
    28. if (0 <= rotation && rotation < 22.5) {
    29. return "N";
    30. } else if (22.5 <= rotation && rotation < 67.5) {
    31. return "NE";
    32. } else if (67.5 <= rotation && rotation < 112.5) {
    33. return "E";
    34. } else if (112.5 <= rotation && rotation < 157.5) {
    35. return "SE";
    36. } else if (157.5 <= rotation && rotation < 202.5) {
    37. return "S";
    38. } else if (202.5 <= rotation && rotation < 247.5) {
    39. return "SW";
    40. } else if (247.5 <= rotation && rotation < 292.5) {
    41. return "W";
    42. } else if (292.5 <= rotation && rotation < 337.5) {
    43. return "NW";
    44. } else if (337.5 <= rotation && rotation < 360.0) {
    45. return "N";
    46. } else {
    47. return null;
    48. }
    49. }
    50.  
    51. @EventHandler
    52. public void StarClaw(PlayerInteractEvent event) {
    53. Player player = event.getPlayer();
    54. World world = player.getWorld();
    55. WorldGuardPlugin wg = (WorldGuardPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldGuard");
    56. final Item grenade = world.dropItem(player.getEyeLocation(), new ItemStack(Material.NETHER_STAR));
    57. if (event.getAction() == Action.RIGHT_CLICK_AIR) {
    58. if (player.getItemInHand().getType() == Material.NETHER_STAR) {
    59. if(player.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.GOLD + "Star Claw")){
    60. grenade.setVelocity(player.getEyeLocation().getDirection());
    61. Location nade = grenade.getLocation();
    62. if (grenade.getNearbyEntities(1, 1, 1) == nade){
    63. Location loc = player.getLocation();
    64. switch (getCardinalDirection(player)) {
    65. case ("N") :
    66. loc.add(0, 0, -1);
    67. break;
    68. case ("E") :
    69. loc.add(1, 0, 0);
    70. break;
    71. case ("S") :
    72. loc.add(0, 0, 1);
    73. break;
    74. case ("W") :
    75. loc.add(-1, 0, 0);
    76. break;
    77. case ("NE") :
    78. loc.add(1, 0, -1);
    79. break;
    80. case ("SE") :
    81. loc.add(1, 0, 1);
    82. break;
    83. case ("NW") :
    84. loc.add(-1, 0, -1);
    85. break;
    86. case ("SW") :
    87. loc.add(-1, 0, 1);
    88. break;
    89. }
    90. for (Entity target : grenade.getNearbyEntities(1, 1, 1)) {
    91. if (target.getType() == EntityType.PLAYER) {
    92. ApplicableRegionSet user = wg.getRegionManager(player.getWorld()).getApplicableRegions(player.getLocation());
    93. ApplicableRegionSet opponent = wg.getRegionManager(player.getWorld()).getApplicableRegions(player.getLocation());
    94. if (user.getFlag(DefaultFlag.PVP) != null && opponent.getFlag(DefaultFlag.PVP) != null) {
    95. if (user.getFlag(DefaultFlag.PVP).equals(State.ALLOW) && opponent.getFlag(DefaultFlag.PVP).equals(State.ALLOW)){
    96. target.teleport(loc);
    97. }
    98.  
    99. }
    100. else if (target.getType() == EntityType.ZOMBIE) {
    101. target.teleport(loc);
    102. }
    103. else if (target.getType() == EntityType.SKELETON) {
    104. target.teleport(loc);
    105. }
    106. else if (target.getType() == EntityType.WITCH) {
    107. target.teleport(loc);
    108. }
    109. else if (target.getType() == EntityType.SPIDER) {
    110. target.teleport(loc);
    111. }
    112. else if (target.getType() == EntityType.CREEPER) {
    113. target.teleport(loc);
    114. }
    115. else if (target.getType() == EntityType.PIG_ZOMBIE) {
    116. target.teleport(loc);
    117. }
    118. else if (target.getType() == EntityType.WOLF) {
    119. target.teleport(loc);
    120. }
    121. else {
    122. return;
    123. }
    124. }
    125. }
    126. }
    127. }
    128. }
    129. }
    130. }
    131. }
    132.  
     
  2. Offline

    Gerov

    Try looping through all the entities in that world and checking if their distance if close enough.
     
  3. Offline

    mine-care

    You are looping thru near by entities on a radius of 1 block mabe increase it to 4,5,6,7,...,1000?
    Then if(target instanceof Player){
    Player.teleport(grenade.getlocation());
    }
     
  4. Offline

    Worthless_Hobo

    I actually found an easier way of doing it, but thanks for the help guys.
     
  5. Offline

    FerusGrim

    For those who may wish to re-create this affect in the future, would you mind sharing this method of yours? :)

    Sharing is caring.
     
  6. Offline

    Worthless_Hobo

    FerusGrim This should work, hasn't been tested yet because I took a break from this plugin I was working on to work on another one, also using a bone like this will look weird, but I'm using a custom server texture pack with this so I just use whatever I feel like lol. If you notice any errors in the code please tell me and Ill fix them.
    Code:java
    1. import java.util.ArrayList;
    2.  
    3. import org.bukkit.ChatColor;
    4. import org.bukkit.Location;
    5. import org.bukkit.Material;
    6. import org.bukkit.entity.EntityType;
    7. import org.bukkit.entity.LivingEntity;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.entity.Snowball;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.block.Action;
    13. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    14. import org.bukkit.event.player.PlayerInteractEvent;
    15. import org.bukkit.inventory.ItemStack;
    16.  
    17. public class Star implements Listener{
    18.  
    19. private ArrayList<Snowball> hookArrayList = new ArrayList<Snowball>();
    20. public Player player;
    21. @SuppressWarnings("deprecation")
    22. @EventHandler
    23. public void ShootStarClaw(PlayerInteractEvent event) {
    24. player = event.getPlayer();
    25. if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
    26. if(player.getItemInHand().getType() == Material.BONE){
    27. if(player.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.YELLOW + "Star Shooter")){
    28. if(player.getInventory().contains(Material.SNOW_BALL)){
    29. player.getInventory().removeItem(new ItemStack[] { new ItemStack(Material.SNOW_BALL, 1) });
    30. player.updateInventory();
    31. Snowball hook = player.launchProjectile(Snowball.class);
    32. hook.setShooter(player);
    33. this.hookArrayList.add((Snowball)hook);
    34. }
    35. }
    36. }
    37. }
    38. }
    39.  
    40. public static String getCardinalDirection(Player player) {
    41. double rotation = (player.getLocation().getYaw() - 180) % 360;
    42. if (rotation < 0) {
    43. rotation += 360.0;
    44. }
    45. if (0 <= rotation && rotation < 22.5) {
    46. return "N";
    47. } else if (22.5 <= rotation && rotation < 67.5) {
    48. return "NE";
    49. } else if (67.5 <= rotation && rotation < 112.5) {
    50. return "E";
    51. } else if (112.5 <= rotation && rotation < 157.5) {
    52. return "SE";
    53. } else if (157.5 <= rotation && rotation < 202.5) {
    54. return "S";
    55. } else if (202.5 <= rotation && rotation < 247.5) {
    56. return "SW";
    57. } else if (247.5 <= rotation && rotation < 292.5) {
    58. return "W";
    59. } else if (292.5 <= rotation && rotation < 337.5) {
    60. return "NW";
    61. } else if (337.5 <= rotation && rotation < 360.0) {
    62. return "N";
    63. } else {
    64. return null;
    65. }
    66. }
    67.  
    68. @EventHandler
    69. public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
    70. if (this.hookArrayList.contains(event.getDamager())){
    71. Location loc = player.getLocation();
    72. switch (getCardinalDirection(player)) {
    73. case ("N") :
    74. loc.add(0, 0, -1);
    75. break;
    76. case ("E") :
    77. loc.add(1, 0, 0);
    78. break;
    79. case ("S") :
    80. loc.add(0, 0, 1);
    81. break;
    82. case ("W") :
    83. loc.add(-1, 0, 0);
    84. break;
    85. case ("NE") :
    86. loc.add(1, 0, -1);
    87. break;
    88. case ("SE") :
    89. loc.add(1, 0, 1);
    90. break;
    91. case ("NW") :
    92. loc.add(-1, 0, -1);
    93. break;
    94. case ("SW") :
    95. loc.add(-1, 0, 1);
    96. break;
    97. }
    98. LivingEntity target = (LivingEntity) event.getEntity();
    99. if (target.getType() == EntityType.PLAYER) {
    100. target.teleport(loc);
    101. }
    102. else if (target.getType() == EntityType.ZOMBIE) {
    103. target.teleport(loc);
    104. }
    105. else if (target.getType() == EntityType.SKELETON) {
    106. target.teleport(loc);
    107. }
    108. else if (target.getType() == EntityType.WITCH) {
    109. target.teleport(loc);
    110. }
    111. else if (target.getType() == EntityType.SPIDER) {
    112. target.teleport(loc);
    113. }
    114. else if (target.getType() == EntityType.CREEPER) {
    115. target.teleport(loc);
    116. }
    117. else if (target.getType() == EntityType.PIG_ZOMBIE) {
    118. target.teleport(loc);
    119. }
    120. else if (target.getType() == EntityType.WOLF) {
    121. target.teleport(loc);
    122. }
    123. else if (target.getType() == EntityType.IRON_GOLEM){
    124. target.teleport(loc);
    125. }
    126. else {
    127. return;
    128. }
    129. }
    130. }
    131. }
     
Thread Status:
Not open for further replies.

Share This Page