You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Minecraft插件中调用原版命令实现世界边界自动缩小?

Minecraft插件调用世界边界命令的实现方案

能否在循环逻辑中直接调用原版命令

可以调用原版命令,但你给出的while+wait写法完全不可行:Minecraft服务端(Bukkit/Spigot/Paper等主流端)的主线程负责所有游戏逻辑运算,直接阻塞会导致整个服务端卡死,必须使用服务端内置的调度器实现定时逻辑。

具体实现方案

推荐优先使用原生API设置世界边界,无需执行命令,兼容性和稳定性更高,其次才是调用命令的方案:

方案1:原生API实现(推荐)

Spigot 1.8+版本已内置世界边界操作API,不需要调用命令:

import org.bukkit.World;
import org.bukkit.WorldBorder;
import org.bukkit.plugin.java.JavaPlugin;

public class BorderPlugin extends JavaPlugin {
    private int currentSize = 1000;

    @Override
    public void onEnable() {
        // 初始化主世界边界为1000格
        World overWorld = getServer().getWorld("world");
        WorldBorder border = overWorld.getWorldBorder();
        border.setSize(currentSize);

        // 启动定时调度任务,20tick=1秒,1小时对应72000tick
        getServer().getScheduler().runTaskTimer(this, () -> {
            if (currentSize <= 100) {
                // 边界缩小到下限后取消任务
                getServer().getScheduler().cancelTasks(this);
                return;
            }
            currentSize -= 50;
            border.setSize(currentSize);
        }, 72000L, 72000L);
    }
}

方案2:调用原版命令实现

如果你确实需要执行命令,使用Bukkit.dispatchCommand方法即可,注意命令不需要带前置斜杠:

// 以控制台身份执行命令,默认拥有所有命令权限
getServer().dispatchCommand(getServer().getConsoleSender(), "worldborder set " + (currentSize - 50));

注意事项

  • 原版命令拼写为worldborder,你示例中的worldboarder多了字母a,会导致命令执行失败
  • 绝对不要在插件主线程使用Thread.sleep、wait这类阻塞方法,所有定时逻辑必须用服务端调度器实现
  • 原生API调用不受权限、其他命令修改类插件的影响,优先选择方案1实现

内容的提问来源于stack exchange,提问作者Cedric Valentin Piehl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:24:03