2016-07-30 8 views
1

私はプラグインを作ろうとしています。これにより、サインをコピーできます。変数をテキストにコピーするのは問題ありませんが、問題は別の記号に貼り付けることです。私は遅延タスクのonSignChangeを実行しようとしましたので、多くの記事を読んで、まだ働いていない:Bukkitプラグイン:ブランク記号

public class Core extends JavaPlugin implements Listener { 

    private boolean enabled = false; 
    private boolean copyMode = false; 

    private String l1; 
    private String l2; 
    private String l3; 
    private String l4; 

    public void onEnable() { 
     getLogger().info("Plugin SignCopyReloaded was successfully enabled!"); 
     getServer().getPluginManager().registerEvents(this, this); 
    } 

    public void onDisable() { 
     getLogger().info("Plugin SignCopyReloaded was successfully disabled!"); 
    } 

    public boolean onCommand(CommandSender sender, Command cmd, String lavel, String[] args) { 
     if(cmd.getName().equalsIgnoreCase("sc") && sender instanceof Player) { 
      if(sender.hasPermission("sc.use")) { 
       if(args.length > 0) { 
        switch (args[0]) { 
         case "enable": enabled = true; 
             sender.sendMessage(ChatColor.GREEN + "Enabled"); 
             break; 
         case "disable": enabled = false; 
             sender.sendMessage(ChatColor.GREEN + "Disabled"); 
             break; 
         case "copy": copyMode = true; 
             enabled = true; 
             sender.sendMessage(ChatColor.GREEN + "Copy mode enabled"); 
             break; 
        } 
       } else { 
        sender.sendMessage(ChatColor.RED + "Usage: /sc enable/disable. When enabled, then use /sc copy and right click the sign you want to copy. Then right click anywhere you want to paste. To copy a new sign type /sc copy again."); 
       } 
      } else { 
       sender.sendMessage(ChatColor.RED + "You must have permission sc.use!"); 
      } 
     } else { 
      sender.sendMessage(ChatColor.RED + "Only player can use this command!"); 
     } 
    return true; 
    } 

    @EventHandler 
    public void onPlayerInteract(PlayerInteractEvent event) { 
     if (event.getAction() == Action.RIGHT_CLICK_BLOCK && enabled == true) { 
      if(event.getClickedBlock().getState() instanceof Sign) { 
       if(copyMode == true) { 
        Sign sign = (Sign) event.getClickedBlock().getState(); 
        l1 = sign.getLine(0); 
        l2 = sign.getLine(1); 
        l3 = sign.getLine(2); 
        l4 = sign.getLine(3); 
        copyMode = false; 
        event.getPlayer().sendMessage(ChatColor.GREEN + "Copy mode disabled. Now rightclick on blank sign."); 
       } else { 
        Sign sign = (Sign) event.getClickedBlock().getState(); 
        sign.setLine(0, l1); 
        sign.setLine(1, "Ahoj"); 
        sign.setLine(2, l3); 
        sign.setLine(3, l4); 
        sign.update(true); 
       } 
      } 
     } 
    } 

    @EventHandler 
     public void onSignChange(SignChangeEvent event) { 
      if(enabled == true) { 
       Sign sign = (Sign) event.getBlock().getState(); 
        event.setCancelled(true); 
        Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { 
         @Override 
         public void run() { 
          sign.setLine(0, l1); 
          sign.setLine(1, "Ahoj"); 
          sign.setLine(2, l3); 
          sign.setLine(3, l4); 
          sign.update(true); 
         } 
        }); 
      } 
    } 
} 
+0

イベントは、あなたがそれはあなたが私のために働いているの提供 – Kerooker

+0

例を起こるしたい時に起こっている場合、いくつかのチェックが知っているします。 –

+0

ビデオが動作していることを示すビデオは、Spigot 1.8.8でテストしました。https://youtu.be/YexNiwhl_tY –

答えて

関連する問題