当前位置: 首页 > 知识库问答 >
问题:

我有一个minecraft插件,可以检测脏话。当玩家咒骂时,我如何执行命令?

公良征
2023-03-14

Sa正如标题所说,我有一个检测脏话的插件。它现在做的是向玩家发送一条消息。但我也希望它执行一个已经在游戏中或来自另一个插件的命令。我不确定如何做到这一点。这是怎么做到的?这是我当前的代码:

package



import com.beam.sweardetector.SwearDetector;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;


public class EventsClass implements Listener {
    SwearDetector plugin = SwearDetector.getPlugin(SwearDetector.class);
   @EventHandler
    public void onPlayerJoinEvent(PlayerJoinEvent event) {
       Player player = event.getPlayer();
       player.sendMessage(ChatColor.GOLD + "This server is running AntiSwear v1.0 by BeamCRASH");
   }

   @EventHandler
    public void chatevent (AsyncPlayerChatEvent event) {
       for(String s: event.getMessage().split(" ")) {
           if(plugin.getConfig().getStringList("swears").contains(s)) {
               event.setCancelled(true);
               event.getPlayer().sendMessage(ChatColor.DARK_RED + "§lSwearing is not allowed on this server!");
           }
       }
   }
}

任何帮助都将不胜感激。非常感谢。

共有1个答案

齐栋
2023-03-14

您可以以玩家身份执行命令:

event.getPlayer().performCommand("mycommand");

但是,如果玩家没有足够的权限,它就不会。

要作为控制台运行命令,请使用以下命令:

Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "mycommand");

此外,您不需要命令开头的/,因为它只是说它是一个命令,并且可以在玩家之间更改。

警告:您应该同步运行这些代码。如果您是异步的(特别是来自AsyncEvent),则应使用以下代码:

Bukkit.getScheduler().runTask(plugin, () -> {
   // my code
   player.performCommand("kill");
});
 类似资料: