remove bukkit commands

This commit is contained in:
expvintl
2023-09-12 23:26:49 +08:00
parent ec65481f20
commit da94e4448d
2 changed files with 58 additions and 1 deletions

View File

@ -1,17 +1,21 @@
package expvintl.tools; package expvintl.tools;
import expvintl.tools.listeners.LoginHandler; import expvintl.tools.listeners.LoginHandler;
import expvintl.tools.utils.CommandHelper;
import org.bukkit.*; import org.bukkit.*;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import java.io.File; import java.io.File;
import java.lang.reflect.Field;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -66,10 +70,41 @@ public final class Tools extends JavaPlugin {
logger.warning(e.getMessage()); logger.warning(e.getMessage());
} }
} }
private void DisableBukkitCommands(){
try {
Field commands=SimpleCommandMap.class.getDeclaredField("knownCommands");
commands.setAccessible(true);
Map<String, Command> map= (Map<String, Command>) commands.get(CommandHelper.getCommandMap());
Iterator<String> it=map.keySet().iterator();
//ȡ<><C8A1>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while(it.hasNext()) {
String cmd= it.next();
//<2F>Ƴ<EFBFBD>bukkit<69><74><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
if (cmd.startsWith("bukkit:")) {
it.remove();
}
//<2F>Ƴ<EFBFBD>ֱ<EFBFBD><D6B1>ִ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
switch (cmd) {
case "ver":
case "version":
case "pl":
case "plugins":
case "about":
it.remove();
break;
}
}
commands.setAccessible(false);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override @Override
public void onEnable() { public void onEnable() {
// Plugin startup logic
logger.info("expvintl:Tools <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"); logger.info("expvintl:Tools <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
DisableBukkitCommands();
initConfigs(); initConfigs();
} }

View File

@ -0,0 +1,22 @@
package expvintl.tools.utils;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandMap;
import java.lang.reflect.Field;
public class CommandHelper {
private static CommandMap commandMap=null;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public static CommandMap getCommandMap(){
try {
Field map=Bukkit.getServer().getClass().getDeclaredField("commandMap");
map.setAccessible(true);
if(commandMap==null) commandMap=(CommandMap)map.get(Bukkit.getServer());
map.setAccessible(false);
} catch (Exception e) {
Bukkit.getLogger().warning("<EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD>ȡCommandMap:\n"+e.getMessage());
}
return commandMap;
}
}