Errors with HangingBreakEvent

Discussion in 'Plugin Development' started by OppositeGamer, Jan 1, 2013.

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

    OppositeGamer

    In my plugin players are not suppost to be able to break ItemFrames, which works by hand. But when its by an entity as in snowball, arrow, explosion(in this case explosion) it gets errors and the explosion breaks the ItemFrame.

    Hanging Listener:
    Code:
        @EventHandler
        public void onBlockHangingBreak(HangingBreakEvent evt)
        {
            HangingBreakByEntityEvent event = (HangingBreakByEntityEvent) evt;
            Player player = (Player) event.getRemover();
         
            if(player.isOp() == true)
            {
                evt.setCancelled(false);
            }
            else if(player.isOp() == false)
            {
                evt.setCancelled(true);
            }
     
        }
    SnowBall method:
    Code:
          @EventHandler
          public void SnowballLightning(ProjectileHitEvent event)
          {
            if (event.getEntity().getType() == EntityType.SNOWBALL) {
              double posX = event.getEntity().getLocation().getX();
              double posY = event.getEntity().getLocation().getY();
              double posZ = event.getEntity().getLocation().getZ();
           
                if (event.getEntityType() == EntityType.PLAYER);
                event.getEntity().getWorld().createExplosion (posX, posY, posZ, 5f, false, false);
              }
            }
          }
    Error Log:
    Code:
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
        at net.minecraft.server.v1_4_6.EntityHanging.damageEntity(EntityHanging.java:229)
        at net.minecraft.server.v1_4_6.Explosion.a(Explosion.java:146)
        at net.minecraft.server.v1_4_6.World.createExplosion(World.java:1610)
        at net.minecraft.server.v1_4_6.WorldServer.createExplosion(WorldServer.java:773)
        at org.bukkit.craftbukkit.v1_4_6.CraftWorld.createExplosion(CraftWorld.java:456)
        at net.gungame.src.events.SnowBallGrenades.SnowballLightning(SnowBallGrenades.java:21)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
        at net.minecraft.server.v1_4_6.EntityProjectile.j_(EntityProjectile.java:162)
        at net.minecraft.server.v1_4_6.World.entityJoinedWorld(World.java:1334)
        at net.minecraft.server.v1_4_6.WorldServer.entityJoinedWorld(WorldServer.java:548)
        at net.minecraft.server.v1_4_6.World.playerJoinedWorld(World.java:1315)
        at net.minecraft.server.v1_4_6.World.tickEntities(World.java:1193)
        at net.minecraft.server.v1_4_6.WorldServer.tickEntities(WorldServer.java:445)
        at net.minecraft.server.v1_4_6.MinecraftServer.r(MinecraftServer.java:580)
        at net.minecraft.server.v1_4_6.DedicatedServer.r(DedicatedServer.java:224)
        at net.minecraft.server.v1_4_6.MinecraftServer.q(MinecraftServer.java:494)
        at net.minecraft.server.v1_4_6.MinecraftServer.run(MinecraftServer.java:427)
        at net.minecraft.server.v1_4_6.ThreadServerApplication.run(SourceFile:849)
    Caused by: java.lang.ClassCastException: org.bukkit.event.hanging.HangingBreakEvent cannot be cast to org.bukkit.event.hanging.HangingBreakByEntityEvent
        at net.gungame.src.events.GameManager.onBlockHangingBreak(GameManager.java:172)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
        ... 28 more
    Ok update! I got the errors to go away, But the exsplosion still breaks the ItemFrame?

    Code:
       
        @EventHandler
        public void onBlockHangingBreak(HangingBreakByEntityEvent evt)
        {
            Player player = (Player) evt.getRemover();
           
            if(player.isOp() == true)
            {
                evt.setCancelled(false);
            }
            else if(player.isOp() == false)
            {
                evt.setCancelled(true);
            }
     
        }
    Ok another update its not arrows only the explosion from the snowball.​

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

    Tirelessly

    Why would the event cancel? An explosion is not a player or an op so it won't setCancelled.
     
  3. Offline

    fireblast709

    The explosion damages the ItemFrame entities. Maybe you can cancel out any damage in the EntityDamageEvent
     
  4. Offline

    OppositeGamer

    kk, can how do I make a player invisible. I did p.hidePlayer(p); but it doesnt work
     
  5. Offline

    messageofdeath

    Plus your setting the entity "explosion" to a player which it cannot. That's where your error comes in.
     
  6. Offline

    fireblast709

    Would not matter if you hide the player for himself ;3
     
    suckycomedian likes this.
  7. Offline

    OppositeGamer

    But I have to get the players name. Thats why I do that.
     
  8. Offline

    fireblast709

    what do you want to hide?
    Code:java
    1. public void hidePlayer(Player who, List<Player> forWho)
    2. {
    3. for(Player player : forWho)
    4. {
    5. if(forWho != null)
    6. {
    7. player.hidePlayer(who);
    8. }
    9. }
    10. }
     
  9. I think the if(forWho != null) part need to in from of the for loop, else the NPE is already thrown at the time it checks it
     
  10. Offline

    fireblast709

    yes it was a very raw version. Actually the forWho should be player, extended (fixed) version:
    Code:java
    1. public void hidePlayer(Player who, List<Player> forWho) throws IllegalArgumentException
    2. {
    3. if(who == null)
    4. {
    5. throw new IllegalArgumentException("You cannot hide offline players");
    6. }
    7. if(forWho == null)
    8. {
    9. throw new IllegalArgumentException("forWho cannot be null. Please specify for who you want to be invisible");
    10. }
    11. for(Player player : forWho)
    12. {
    13. if(player != null)
    14. {
    15. player.hidePlayer(who);
    16. }
    17. }
    18. }
     
Thread Status:
Not open for further replies.

Share This Page