Solved Custom Signs problems!

Discussion in 'Plugin Development' started by ksbdude, Jan 19, 2014.

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

    ksbdude

    This is my current code.
    Why isn't it working??
    Code:java
    1.  
    2. @EventHandler
    3. public void onSignChange(SignChangeEvent e){
    4. Sign s = (Sign) e.getBlock();
    5. if(s.getLine(0).equalsIgnoreCase("arenapvp")){
    6. s.setLine(0, "[Arena PVP]");
    7. s.update();
    8. e.getPlayer().sendMessage("Yay!");
    9. }
    10. }
    11. @EventHandler
    12. public void onInteract(PlayerInteractEvent Event) {
    13. Player player = Event.getPlayer();
    14. Block block = Event.getClickedBlock();
    15. if (block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST) {
    16. Sign sign = (Sign) block.getState();
    17. if(sign.getLine(0).equalsIgnoreCase("[Arena PVP]")){
    18. player.sendMessage("HellO!");
    19. //more code
    20. }
    21. }
    22. }
    23.  
     
  2. Offline

    bennie3211

    did you register the events?
     
  3. Offline

    ksbdude

    bennie3211

    Here is my SignListener.class
    Code:java
    1.  
    2. package main;
    3.  
    4. import org.bukkit.Material;
    5. import org.bukkit.block.Block;
    6. import org.bukkit.block.Sign;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.event.EventHandler;
    9. import org.bukkit.event.Listener;
    10. import org.bukkit.event.block.SignChangeEvent;
    11. import org.bukkit.event.player.PlayerInteractEvent;
    12.  
    13. public class SignListener implements Listener {
    14. @EventHandler
    15. public void onSignChange(SignChangeEvent e){
    16. Sign s = (Sign) e.getBlock();
    17. if(s.getLine(0).equalsIgnoreCase("arenapvp")){
    18. s.setLine(0, "[Arena PVP]");
    19. s.update();
    20. e.getPlayer().sendMessage("Yay!");
    21. }
    22. }
    23. @EventHandler
    24. public void onInteract(PlayerInteractEvent Event) {
    25. Player player = Event.getPlayer();
    26. Block block = Event.getClickedBlock();
    27. if (block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST) {
    28. Sign sign = (Sign) block.getState();
    29. if(sign.getLine(0).equalsIgnoreCase("[Arena PVP]")){
    30. player.sendMessage("HellO!");
    31. //more code
    32. }
    33. }
    34. }
    35. }
    36.  

    And here is my onEnable in main class
    Code:java
    1.  
    2. @Override
    3. public void onEnable(){
    4. if(!getDataFolder().exists())
    5. getDataFolder().mkdir();
    6.  
    7. if(getConfig() == null)
    8. saveDefaultConfig();
    9.  
    10. new ArenaManager(this);
    11. ArenaManager.getManager().loadGames();
    12.  
    13. getServer().getPluginManager().registerEvents(new GameListener(this), this);
    14. getServer().getPluginManager().registerEvents(new SignListener(), this);
    15. }
    16.  
     
  4. ksbdude
    Do it like this:
    Code:java
    1. if(e.getLine(0).equalsIgnoreCase("arenapvp")){
    2. e.setLine(0, "[Arena PVP]");
    3. e.getPlayer().sendMessage("Yay!");
    4. }

    No need to call the block, or update the sign.
     
  5. Offline

    MarinD99

    Try this:
    Code:java
    1. Sign s = (Sign) e.getBlock().getState();
    2. // In order for the sign to get the block, it needs to get the state that it's in in order to procede.
     
  6. Offline

    ksbdude

    MarinD99 HeyAwesomePeople bennie3211
    This isn't working either.

    Code:java
    1. public class SignListener implements Listener {
    2. @EventHandler
    3. public void onSignChange(SignChangeEvent e){
    4. Sign s = (Sign) e.getBlock().getState();
    5. if(s.getLine(0).equalsIgnoreCase("arenapvp")){
    6. s.setLine(0, "[Arena PVP]");
    7. s.update();
    8. e.getPlayer().sendMessage("Yay!");
    9. }
    10. }
    11. @EventHandler
    12. public void onInteract(PlayerInteractEvent Event) {
    13. Player p = Event.getPlayer();
    14. Sign s = (Sign) Event.getClickedBlock().getState();
    15. if (s.getType() == Material.WALL_SIGN || s.getType() == Material.SIGN_POST) {
    16. if(s.getLine(0).equalsIgnoreCase("[Arena PVP]")){
    17. p.sendMessage("HellO!");
    18. //more code
    19. }
    20.  
    21. }
    22. }
    23. }


    I get this error
    Code:
    [11:41:35 ERROR]: Could not pass event PlayerInteractEvent to ArenaPVP v1.0.0
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:427) ~[spigot1192.jar:git-Spigot-1192]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62) ~[spigot1192.jar:git-Spigot-1192]
    at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredLi
    stener.java:30) ~[spigot1192.jar:git-Spigot-1192]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:478) [spigot1192.jar:git-Spigot-1192]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:463) [spigot1192.jar:git-Spigot-1192]
    at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callPlayerInte
    ractEvent(CraftEventFactory.java:208) [spigot1192.jar:git-Spigot-1192]
    at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callPlayerInte
    ractEvent(CraftEventFactory.java:178) [spigot1192.jar:git-Spigot-1192]
    at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
    :986) [spigot1192.jar:git-Spigot-1192]
    at net.minecraft.server.v1_7_R1.PacketPlayInArmAnimation.a(SourceFile:43
    ) [spigot1192.jar:git-Spigot-1192]
    at net.minecraft.server.v1_7_R1.PacketPlayInArmAnimation.handle(SourceFi
    le:9) [spigot1192.jar:git-Spigot-1192]
    at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:147
    ) [spigot1192.jar:git-Spigot-1192]
    at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [spig
    ot1192.jar:git-Spigot-1192]
    at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
    51) [spigot1192.jar:git-Spigot-1192]
    at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    59) [spigot1192.jar:git-Spigot-1192]
    at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    34) [spigot1192.jar:git-Spigot-1192]
    at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :446) [spigot1192.jar:git-Spigot-1192]
    at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    17) [spigot1192.jar:git-Spigot-1192]
    Caused by: java.lang.NullPointerException
    at main.SignListener.onInteract(SignListener.java:24) ~[?:?]
    at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
    .7.0_13]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_13]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:425) ~[spigot1192.jar:git-Spigot-1192]
    ... 16 more
    > 
     
  7. Offline

    Necrodoom

    Locked. Unofficial builds are not supported here.
     
Thread Status:
Not open for further replies.

Share This Page