[英]How to use normal Minecraft commands in a Minecraft Plugin?
我想编写一个 Minecraft 插件,我想使用 Minecraft 中的标准命令,例如 /worldboarder set 命令。
具体来说,我想编写一个插件,将 worldboarder 设置为 1000 个块,并且每小时它会变小 50 个块。 是否可以在我的插件中循环使用标准命令? 就像命令 /worldboarder set 1000 以及我如何在我的插件中使用它们一样。
我想做这样的事情:
int distance = 1000;
while(distance > 100) {
wait(3600000);
// "/worldboarder set " + distance -50; // here how to run cmd ?
}
首先,您不能在服务器中使用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
方法接受几个参数:插件、可运行的调度程序、开始前的时间(以滴答计)和每次调用之间的时间(以滴答计)/
是默认字符,表示它是一个命令。 比如这里我们明确的说是一个命令,我们不用使用它。 例子文件:
在较新的 bukkit 版本中,您可以使用 bukkit.WorldBorder object ( https://hub.spigotmc.org/javadocs/spigot/org/bukkit/WorldBorder.html )
您可以通过先获取世界然后获取其 WorldBorder object 来修改世界的世界边界
World world = Bukkit.getWorld("world"); // Most of the time the default world is named "world"
WorldBorder border = world.getWorldBorder();
然后你可以用worldborder做任何你想做的事
border.setSize(border.getSize() - 50); // Reduce the size of the border by 50 instantly
如果有人找到这篇文章,希望这会很有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.