繁体   English   中英

如何在 Minecraft 插件中使用正常的 Minecraft 命令?

[英]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方法接受几个参数:插件、可运行的调度程序、开始前的时间(以滴答计)和每次调用之间的时间(以滴答计)
  • 20 滴答 = 1 秒。 比如你想要每小时:60 * 60 = 每小时秒,所以 60 * 60 * 20 = 每小时滴答
  • 开始前的时间是 20(所以 1s),因为在完全加载世界之前 spigot start 插件。 所以它不会找到世界。 它会在完整的服务器启动后开始运行调度程序(所以在世界之后)。 1s 只是为了确定,例如它不会改变游戏玩法以在启动时等待 1s。
  • 命令中不需要“/”。 /是默认字符,表示它是一个命令。 比如这里我们明确的说是一个命令,我们不用使用它。 例子

文件:

在较新的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM