Solved Sign not updating

Discussion in 'Plugin Development' started by MinecraftBoxGut, May 11, 2016.

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

    MinecraftBoxGut

    I am making a sign tp plugin for 1v1s but the sign doesn't change when placed as it should. Here is my code
    Code:
    package main.mcbox.pvp;
    
    
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.World;
    import org.bukkit.WorldCreator;
    import org.bukkit.block.Sign;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.block.SignChangeEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin implements Listener {
        public void onEnable() {
            
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            
            }
    
        @EventHandler(priority = EventPriority.HIGHEST)
         public void onSignBreak(BlockBreakEvent e)
         {
           if ((e.getBlock().getState() instanceof Sign))
           {
            
          
          
                 if (e.getPlayer().isSneaking())
                 {
                   e.getBlock().setType(Material.AIR);
                   }
                
                 else
                 {
                   e.setCancelled(true);
                  
                   e.getPlayer().sendMessage(ChatColor.GOLD + "If you want to break this sign, please sneak + break!");
                 }
               }
         }
          
          
        
        
        
         @EventHandler(priority = EventPriority.NORMAL)
         public void onSignCreate(SignChangeEvent e)
         {
            
           Player player = e.getPlayer();
           player.sendMessage(ChatColor.GOLD + "You have placed down a sign");
          
           if (e.getLine(0).equalsIgnoreCase("1v1s")) {
            
                
          
             e.setLine(0, ChatColor.GREEN + "Join");
             e.setLine(1,ChatColor.GOLD + "[1v1s]");
                 player.sendMessage(ChatColor.GRAY + "You made a join sign for " + ChatColor.GOLD + "1v1s");
               }
             }
          
        
        
         @EventHandler(priority = EventPriority.HIGH)
         public void onSignInteract(PlayerInteractEvent e)
         {
           Player player = e.getPlayer();
           if ((e.getAction() == Action.RIGHT_CLICK_BLOCK) && (e.hasBlock()) && ((e.getClickedBlock().getState() instanceof Sign)))
           {
             Sign sign = (Sign)e.getClickedBlock().getState();
             if (sign.getLine(0).equalsIgnoreCase(ChatColor.GREEN + "Join") && sign.getLine(1).equalsIgnoreCase(ChatColor.GOLD + "[1v1s]"))
             {
               World yourworld = Bukkit.getServer().getWorld("1v1s");
                 if (yourworld != null) {
                   Location loc = new Location(yourworld ,0, 20 , 0);
                   player.teleport(loc);
                 } else {
                     Bukkit.createWorld(new WorldCreator(this.getConfig().getString("1v1s")));
                     Location loc = new Location(yourworld ,0, 20 , 0);
                       player.teleport(loc);
                 }
            
              
                 }
               }
      
    }
    }
    
    I didn't convert the block to the sign the event imported the sign so now of them work but not the third one.
     
    Last edited: May 12, 2016
  2. Offline

    Zombie_Striker

    Please actually read the error message before clicking things. The reason you got the error that caused you to case "this" to a listener Is because this class does not implement listener. Let the class implement listener and remove this cast.
     
  3. Offline

    mine-care

    That can very well error. You cast a non-listener to a listener...
    As a general rule, check before casting although it doesnt apply in this case. Implement Listener instead

    EDIT: Ninja'd by the ninja... err by @Zombie_Striker i ment.
     
  4. Offline

    MinecraftBoxGut

    Thank you but the sign still doesn't update
    Zombie_Striker there was no error though do you mean in eclipse?
     
  5. Offline

    mcdorli

    Yeah
     
  6. Offline

    MinecraftBoxGut

    So Ill check if the event is registered

    Yes but the that doesnt make thie sign update when i tpye 1v1s on the first line
     
    Last edited by a moderator: May 12, 2016
  7. Offline

    mcdorli

    Can you show the full code?
     
  8. Offline

    MinecraftBoxGut

    Yes here it is
    Code:
    package main.mcbox.pvp;
    
    
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.World;
    import org.bukkit.WorldCreator;
    import org.bukkit.block.Sign;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.block.SignChangeEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin implements Listener {
        public void onEnable() {
            
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            
            }
    
        @EventHandler(priority = EventPriority.HIGHEST)
          public void onSignBreak(BlockBreakEvent e)
          {
            if ((e.getBlock().getState() instanceof Sign))
            {
             
            
            
                  if (e.getPlayer().isSneaking())
                  {
                    e.getBlock().setType(Material.AIR);
                    }
                 
                  else
                  {
                    e.setCancelled(true);
                   
                    e.getPlayer().sendMessage(ChatColor.GOLD + "If you want to break this sign, please sneak + break!");
                  }
                }
          }
            
           
         
        
         
          @EventHandler(priority = EventPriority.NORMAL)
          public void onSignCreate(SignChangeEvent e)
          {
              Sign sign = (Sign)e.getBlock().getState();
            Player player = e.getPlayer();
            player.sendMessage(ChatColor.GOLD + "You have placed down a sign");
            if (sign.getLine(0).equalsIgnoreCase("1v1s")) {
               
                 
            
              sign.setLine(0, ChatColor.GREEN + "Join");
              sign.setLine(1,ChatColor.GOLD + "[1vs1]");
                  player.sendMessage(ChatColor.GRAY + "You made a join sign for " + ChatColor.GOLD + "1v1s");
                }
              }
           
         
         
          @EventHandler(priority = EventPriority.HIGH)
          public void onSignInteract(PlayerInteractEvent e)
          {
            Player player = e.getPlayer();
            if ((e.getAction() == Action.RIGHT_CLICK_BLOCK) && (e.hasBlock()) && ((e.getClickedBlock().getState() instanceof Sign)))
            {
              Sign sign = (Sign)e.getClickedBlock().getState();
              if (sign.getLine(0).equalsIgnoreCase(ChatColor.GREEN + "Join") && sign.getLine(1).equalsIgnoreCase(ChatColor.GOLD + "[1v1s]"))
              {
                  World yourworld = Bukkit.getServer().getWorld("1v1s");
                  if (yourworld != null) {
                      Location loc = new Location(yourworld ,0, 20 , 0);
                      player.teleport(loc);
                  } else {
                      Bukkit.createWorld(new WorldCreator(this.getConfig().getString("1v1s")));
                      Location loc = new Location(yourworld ,0, 20 , 0);
                          player.teleport(loc);
                  }
               
               
                  }
                }
       
    }
    }
    I started with the signs heres the plugin yml
    Code:
    name: 1v1s
    main: main.mcbox.pvp.Main
    version: 1.0
    description: >
                1v1s!
    
     
Thread Status:
Not open for further replies.

Share This Page