作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以在我的服务器中 /me
是一个启用的命令。我想禁用它,因为我不希望人们能够这样做。
我正在学习 java,所以我决定自己编写一些禁用 /me
的代码。
所以我写了下面的代码:
package com.ste999.disableme;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.player.AsyncPlayerChatEvent;
public class Main extends JavaPlugin implements Listener
@Override
public void onEnable() {
getLogger().info("disable me enabled");
PluginManager pm = this.getServer().getPluginManager();
pm.registerEvents(this, (this));
}
@Override
public void onDisable() {
getLogger().info("disable me disabled");
}
@EventHandler
public void OnMe(AsyncPlayerChatEvent event)
{
Player p = event.getPlayer();
if(!p.hasPermission("ste999.me")) {
if (event.getMessage().startsWith("/me")) {
event.setCancelled(true);
p.sendMessage("§4Dont me me!");
}
}
}
}
使用以下 plugin.yml 文件:
name: Disable_Me
main: com.ste999.disableme.Main
version: 1.0
load: startup
description: this is should disable me
commands:
现在,如果没有 op 的人运行 /me hello
,它不应该输出到聊天中,用户应该得到一条消息,如 Dont me me!
但事实并非如此。用户仍然可以在没有 op 的情况下执行 /me hello
并且代码应该阻止这种情况
由于我是 java 的新手,这个错误可能很容易找到,我们将不胜感激任何帮助。
最佳答案
问题是 AsyncPlayerChatEvent
只有在实际输入聊天消息(而不是命令)时才会被调用。对于命令,您必须使用 PlayerCommandPreprocessEvent
,正如 Mischa 在评论中精彩解释的那样。更改事件将使它起作用:
@EventHandler
public void disableMeCommand(PlayerCommandPreprocessEvent event) {
Player p = event.getPlayer();
if(!p.hasPermission("ste999.me")) {
if(event.getMessage().startsWith("/me")) {
event.setCancelled(true);
p.sendMessage("§4Dont me me!");
}
}
}
但是,请注意 PlayerCommandPreprocessEvent应该避免。幸运的是,还有另一种方法可以在 bukkit 服务器中完全禁用命令。您的服务器文件夹中应该有一个 commands.yml
文件。只需在文件中添加“me”别名并将其设置为 null:
aliases:
me:
- null
关于java -/me 在 minecraft 中没有被我写的插件禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55041572/
我是一名优秀的程序员,十分优秀!