Solved Cant play fireworkeffect at eyeLocation, help!

Discussion in 'Plugin Development' started by Nosy Coder, Dec 14, 2013.

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

    Nosy Coder

    I've been trying to spawn a firework effect at the players eye location, but it doesn't seem to work... I can't find the bug :c. Please help!

    Code:
    Code:java
    1. package me.nosy.damage;
    2.  
    3. import java.lang.reflect.Method;
    4. import java.util.ArrayList;
    5. import java.util.logging.Logger;
    6.  
    7. import org.bukkit.Bukkit;
    8. import org.bukkit.ChatColor;
    9. import org.bukkit.Color;
    10. import org.bukkit.FireworkEffect;
    11. import org.bukkit.Location;
    12. import org.bukkit.Material;
    13. import org.bukkit.World;
    14. import org.bukkit.FireworkEffect.Type;
    15. import org.bukkit.command.Command;
    16. import org.bukkit.command.CommandSender;
    17. import org.bukkit.enchantments.Enchantment;
    18. import org.bukkit.entity.Firework;
    19. import org.bukkit.entity.Player;
    20. import org.bukkit.event.EventHandler;
    21. import org.bukkit.event.Listener;
    22. import org.bukkit.event.block.Action;
    23. import org.bukkit.event.player.PlayerInteractEvent;
    24. import org.bukkit.inventory.ItemStack;
    25. import org.bukkit.inventory.meta.FireworkMeta;
    26. import org.bukkit.inventory.meta.ItemMeta;
    27. import org.bukkit.plugin.PluginDescriptionFile;
    28. import org.bukkit.plugin.java.JavaPlugin;
    29.  
    30. public class Basic extends JavaPlugin implements Listener {
    31. public final Logger logger = Logger.getLogger("Minecraft");
    32. public static Basic plugin;
    33. private Method world_getHandle = null;
    34. private Method nms_world_broadcastEntityEffect = null;
    35. private Method firework_getHandle = null;
    36.  
    37. //ENABLE
    38.  
    39. public void onEnable() {
    40. PluginDescriptionFile pdfFile = this.getDescription();
    41. this.logger.info(pdfFile.getName() + " Version" + pdfFile.getVersion()
    42. + " Has Been Enabled.");
    43. Bukkit.getServer().getPluginManager().registerEvents(this, this);
    44. }
    45.  
    46. //FIREWORK METHOD
    47.  
    48. public void playFirework(World world, Location loc, FireworkEffect fe)
    49. throws Exception {
    50.  
    51. Firework fw = (Firework) world.spawn(loc, Firework.class);
    52. Object nms_world = null;
    53. Object nms_firework = null;
    54. if (world_getHandle == null) {
    55.  
    56. world_getHandle = getMethod(world.getClass(), "getHandle");
    57. firework_getHandle = getMethod(fw.getClass(), "getHandle");
    58. }
    59.  
    60. nms_world = world_getHandle.invoke(world, (Object[]) null);
    61. nms_firework = firework_getHandle.invoke(fw, (Object[]) null);
    62.  
    63. if (nms_world_broadcastEntityEffect == null) {
    64. nms_world_broadcastEntityEffect = getMethod(nms_world.getClass(),
    65. "broadcastEntityEffect");
    66. }
    67.  
    68. FireworkMeta data = (FireworkMeta) fw.getFireworkMeta();
    69.  
    70. data.clearEffects();
    71.  
    72. data.setPower(1);
    73.  
    74. data.addEffect(fe);
    75.  
    76. fw.setFireworkMeta(data);
    77.  
    78. nms_world_broadcastEntityEffect.invoke(nms_world, new Object[] {
    79. nms_firework, (byte) 17 });
    80.  
    81. fw.remove();
    82. }
    83.  
    84. private static Method getMethod(Class<?> cl, String method) {
    85. for (Method m : cl.getMethods()) {
    86. if (m.getName().equals(method)) {
    87. return m;
    88. }
    89. }
    90. return null;
    91. //EVENT
    92. }
    93.  
    94. //EVENT
    95. @EventHandler
    96.  
    97.  
    98. public void toggle(PlayerInteractEvent event) {
    99. Player player = event.getPlayer();
    100.  
    101. if (player.getInventory().getItemInHand().getType() == Material.STICK) {
    102. if(player.getInventory().getItemInHand().getItemMeta().getDisplayName() == ChatColor.DARK_PURPLE + "Firework stick"){
    103. if (event.getAction() == Action.RIGHT_CLICK_AIR
    104. || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
    105. try {
    106. playFirework(player.getWorld(), player.getTargetBlock(null, 40).getLocation(), FireworkEffect.builder().with(Type.BURST).withColor(Color.BLACK).withColor(Color.RED).withColor(Color.SILVER).withFade(Color.GRAY)
    107. .withFade(Color.WHITE).build());
    108. } catch (Exception exc) {
    109.  
    110. }
    111. }
    112. }
    113. }
    114. }
    115.  
    116. //COMMANDS
    117. public boolean onCommand(CommandSender sender, Command cmd,
    118. String commandLabel, String[] args) {
    119. Player player = (Player) sender;
    120.  
    121. if (commandLabel.equalsIgnoreCase("fireworkwand")
    122. && player.hasPermission("fw.wand")) {
    123. player.getInventory().addItem(fw);
    124. }
    125. return false;
    126. }
    127.  
    128. //ITEMSTACK
    129. ItemStack fw = new ItemStack(Material.STICK);
    130. {
    131. ItemMeta itemmeta = fw.getItemMeta();
    132. ArrayList<String> im = new ArrayList<String>();
    133. itemmeta.setDisplayName(ChatColor.DARK_PURPLE + "Firework stick");
    134. im.add(ChatColor.DARK_RED + "Wand spawning fireworks!");
    135. itemmeta.setLore(im);
    136. fw.setItemMeta(itemmeta);
    137. }
    138. }
    139.  



    Edit: I know this is fairly noobish coding, but I'm new to plugin dev, please do not comment on other things than the problem with the code.
     
  2. Offline

    Nosy Coder

    Nvm, the bug was not the effect it self, but get itemMeta...
     
Thread Status:
Not open for further replies.

Share This Page