ClassCastException on (Sign)block

Discussion in 'Plugin Development' started by killerremijn11, Jan 17, 2013.

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

    killerremijn11

    Hello, i am getting a classcastexception on line 25 of my code here and i dont know why


    Event:
    Code:
        @EventHandler
        public void OnFlagRetrieve(PlayerInteractEvent event){
            if(event.getAction() == Action.RIGHT_CLICK_BLOCK){
                if(event.getClickedBlock().getType() == Material.WALL_SIGN || event.getClickedBlock().getType() == Material.SIGN){
                    Sign sign = (Sign)event.getClickedBlock();
                    plugin.getLogger().info("Sign clicked: " + sign.toString());
                    if(plugin.getGame(event.getPlayer().getName()) != null){
                        if(sign.getLine(1).equalsIgnoreCase("[Flag]")){
                            if(sign.getLine(2).equalsIgnoreCase("Blue")){
                                plugin.getLogger().info("blue");
                                plugin.getGame(event.getPlayer().getName()).Flag("Blue", event.getPlayer().getName());
                            }else{
                                plugin.getLogger().info("red");
                                plugin.getGame(event.getPlayer().getName()).Flag("Red", event.getPlayer().getName());
                            }
                        }else plugin.getLogger().info("not a flag");
                    }else plugin.getLogger().info("Game was null");
                       
                }
            }
        }
    Stacktrace:
    Code:
    17:55:50 [SEVERE] Could not pass event PlayerInteractEvent to Thinghunter CTF v1.0
    org.bukkit.event.EventException
            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 org.bukkit.craftbukkit.v1_4_6.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:178)
            at net.minecraft.server.v1_4_6.PlayerInteractManager.interact(PlayerInteractManager.java:376)
            at net.minecraft.server.v1_4_6.PlayerConnection.a(PlayerConnection.java:656)
            at net.minecraft.server.v1_4_6.Packet15Place.handle(SourceFile:58)
            at net.minecraft.server.v1_4_6.NetworkManager.b(NetworkManager.java:290)
            at net.minecraft.server.v1_4_6.PlayerConnection.d(PlayerConnection.java:112)
            at net.minecraft.server.v1_4_6.ServerConnection.b(SourceFile:39)
            at net.minecraft.server.v1_4_6.DedicatedServerConnection.b(SourceFile:30)
            at net.minecraft.server.v1_4_6.MinecraftServer.r(MinecraftServer.java:598)
            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.craftbukkit.v1_4_6.block.CraftBlock cannot be cast to org.bukkit.block.Sign
            at com.thinghunter.ctf.CTF_Flag.OnFlagRetrieve(CTF_Flag.java:25)
            at sun.reflect.GeneratedMethodAccessor14.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)
            ... 16 more
    
    line 25 is the line with Sign sign = (Sign)event.getClickedBlock();

    it would be great if any of you guys would be able to help me
     
  2. Offline

    caseif

    Code:java
    1. Sign sign = (Sign)event.getClickedBlock().getState();

    Hope this helps! :D
     
  3. Offline

    JHA™

    Make it a try stament and add an exception at the bottom printing out a line saying Flag Error. The mess around with the code untill you don't see any more errors
    AngryNerd I tried that and it doesn't work :(
    And I also have trouble with this event I get the same error but I made it smaller by adding the exception.
     
  4. Offline

    tommycake50

    nope it does work sign extends BlockState.
     
  5. Offline

    hockeygoalie5

    You want to make sure that the block is actually a sign as well:
    Code:
    if(event.getClickedBlock().getState() instanceof Sign) {
        Sign sign = (Sign) event.getClickedBlock().getState();
    }
    
     
  6. Offline

    gomeow

    Also, don't check for type == Material.SIGN, that one should be Material.SIGN_POST
     
Thread Status:
Not open for further replies.

Share This Page