本篇教程由作者设定未经允许禁止转载。
在这期教学里,主要目的就是为了让你在1.16中来阻止玩家使用特定指令,来防止作弊,比如gamemode系列,或者time系列等。
首先第一步导入包:
import crafttweaker.api.events.CTEventManager; //crt提供的事件创建
import club.gumeng.messagetweaker.event.SendCommandEvent;//玩家发送指令事件
第二步敲码:
CTEventManager.register<SendCommandEvent>((event) => {
var command = event.command;
if ("gamemode" in command) {
event.cancel();
//这里也可以写上反馈:不可用使用xx指令,但是本期教学的目的是使用该模组
}
});
现在来分析第二步的代码
event.command 来获取发送出来的指令 比如玩家发送/gamemode creative 那么这边获取到的就是“/gamemode creative”
if("gamemode" in command) 这一句话中的"gamemode" in 就是判断在command这个变量中有没有存在gamemode这个字符串
event.cancel();来取消这个事件
这个代码的作用就是检测玩家发送带有gamemode这个字符串的指令,并取消。
如果自己手动改可以将这个引号里面的gamemode改成你想要的禁止指令 ,比如time、effect等
下面提供一个现成的代码例子供参考(如果要使用可以直接更改数组里的数据)
val command = [
"gamemode",
"gamerule",
"time",
"weather",
"gamestage",
"effect",
"fill"
];
CTEventManager.register<SendCommandEvent>(event => {
if(event.isPlayer()){
val player = event.getPlayer();
val playerName = player.getName().formattedText;
val comand = event.command;
for i in 0 .. command.length{
if(command[i] in comand){
player.sendMessage(MCTextComponent.createStringTextComponent(playerName + "你现在还无法使用" + command[i] + "指令"));
event.cancel();
}
}
}
});
不建议所有指令都拦截,可能会出现意想不到的事情