本篇教程由作者设定未经允许禁止转载。

在这期教学里,主要目的就是为了让你在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();
            }
        }
    }
    
});

不建议所有指令都拦截,可能会出现意想不到的事情