首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在“我的世界”插件中使用普通的“我的世界”命令?

如何在“我的世界”插件中使用普通的“我的世界”命令?
EN

Stack Overflow用户
提问于 2021-10-11 16:46:28
回答 1查看 154关注 0票数 0

我想要编写一个“我的世界”插件,我想使用“我的世界”中的标准命令,如/worldboarder设置命令。

具体地说,我想编写一个插件,将世界边界设置在1000个区块上,每小时它会变小50个区块。是否可以在循环中使用我的插件中的标准命令?比如命令/worldboarder set1000以及我如何在插件中使用它们。

我想做这样的事情:

代码语言:javascript
运行
复制
int distance = 1000;
while(distance > 100) {
    wait(3600000);
    // "/worldboarder set " + distance -50; // here how to run cmd ?
}
EN

回答 1

Stack Overflow用户

发布于 2021-10-12 11:38:32

首先,你不能在服务器中使用wait函数,这会冻结整个服务器,这是一个很大的问题。您必须使用Scheduler (参见后面)。

然后,要运行一个简单的注释,您必须使用以下命令:

代码语言:javascript
运行
复制
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "mycmd arg1 arg2");

所以,你必须这样做:

代码语言:javascript
运行
复制
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 = tick per hour
  • The time 1s start是20 (所以1秒),因为spigot在完全加载之前启动插件。所以它找不到世界。并且它将在服务器完全启动后开始运行调度程序(世界之后也是如此)。1s只是为了确认,比如它不会改变游戏的玩法,在startup.
  • Don't命令中等待1s需要"/“。/是表示这是一个命令的默认字符。比如在这里,我们清楚地说它是一个命令,我们不需要使用它。Example

文档:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69529791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档