-1

現在使用していPlayerCommandPreprocessEventます。私は次のような構文を使用します:

@EventHandler(priority = EventPriority.HIGHEST)
public void PlayerCommandPreprocess(PlayerCommandPreprocessEvent event){
    String cmd;
    String args;
    if(event.getMessage().indexOf(" ") == -1){
        cmd = event.getMessage().substring(1);
        args = "";
        getLogger().info(String.format("%s used '%s'",event.getPlayer().getDisplayName(), cmd));
    }else{
        cmd = event.getMessage().substring(0, event.getMessage().indexOf(" ")).substring(1);
        args = event.getMessage().substring(event.getMessage().indexOf(" ")+1);
        getLogger().info(String.format("%s used '%s' with args '%s'",event.getPlayer().getDisplayName(), cmd, args));
    }

    switch(cmd){
        case "serverinfo":
            event.getPlayer().sendMessage("This server is running some sort of new plugin that is not finished yet.");
            event.setCancelled(true);
            break;
        case "spawn":
            event.getPlayer().sendMessage("So you wanted to teleport to spawn to save time, right?");
            event.getPlayer().sendMessage("This will teach you, cheater!");
            event.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.POISON,1200,1));
            event.setCancelled(true);
            break;
        default:
            event.setCancelled(false);
            break;
    }
}

クラス内で別のメソッドを使用したいと思いますPlayerCommands。これがサーバーで使用される唯一のプラグインになるため、すべてのコマンドをキャプチャし、それらが持っているかどうかを評価してPlayerCommands.cmd_<cmdname>()呼び出します。

私はこれが経由で行うことが可能であることを知っていますjava.lang.reflectが、今のところ私はそれをBukkitサーバーに実装する方法を知りません。

4

1 に答える 1

0

以前Class.forName()は、メソッドを繰り返して登録していました。

于 2012-09-08T22:12:41.960 に答える