我想要编写一个“我的世界”插件,我想使用“我的世界”中的标准命令,如/worldboarder设置命令。
具体地说,我想编写一个插件,将世界边界设置在1000个区块上,每小时它会变小50个区块。是否可以在循环中使用我的插件中的标准命令?比如命令/worldboarder set1000以及我如何在插件中使用它们。
我想做这样的事情:
int distance = 1000;
while(distance > 100) {
wait(3600000);
// "/worldboarder set " + distance -50; // here how to run cmd ?
}
发布于 2021-10-12 11:38:32
首先,你不能在服务器中使用wait
函数,这会冻结整个服务器,这是一个很大的问题。您必须使用Scheduler
(参见后面)。
然后,要运行一个简单的注释,您必须使用以下命令:
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "mycmd arg1 arg2");
所以,你必须这样做:
private int border = 1000; // actual border value
private BukkitTask task; // bukkit task to cancel it
@Override
public void onEnable() {
task = getServer().getScheduler().runTaskTimer(this, () -> { // start lambda expression
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "worldboarder set " + border); // run cmd
if(border == 100) { // no longer need to change world border.
task.cancel(); // cancel actual task to never run it again
return;
}
border -= 50; // reduce border amount for next time
}, 20, 60 * 60 * 20);
}
以下是一些附加信息:
runTaskTimer
方法接受的参数很少:插件、可运行的调度程序、启动前的时间(以刻度为单位)和每次调用之间的时间(以刻度为单位)/
是表示这是一个命令的默认字符。比如在这里,我们清楚地说它是一个命令,我们不需要使用它。Example文档:
https://stackoverflow.com/questions/69529791
复制相似问题