问题标签 [bukkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
499 浏览

bash - bash 中的缓冲管道

我在 Linux 机器上运行 Bukkit (Minecraft) 服务器,我希望使用服务器的命令正常关闭服务器,并使用命令行在stop特定时间挂起计算机。pm-suspend这是我所拥有的:

(我已经编辑了,/etc/sudoers所以我暂停时不必输入密码。)

问题是,当它处于perl -e睡眠状态时,服务器期待一个恒定的字节流,(这是我的猜测。我可能误解了一些东西。)所以它打印出它收到的所有空内容,占用宝贵的资源:

有没有缓冲管道之类的东西?如果没有,有什么方法可以将延迟输入发送到脚本?

0 投票
1 回答
3665 浏览

php - 使用 fsockopen 连接到服务器 - 连接被拒绝

我想做的是在我的网站上添加对 Votifier 插件的支持。

我已经为 Minecraft 服务器转发了正确的端口,测试并确认它们是打开的。还使用Minestatus确认 Votifier 插件工作正常。

但是,当我尝试使用我找到的 PHP 脚本连接到服务器时,我得到的只是连接被拒绝。

似乎 Votifier 正在断开连接,可能是因为加密不正确?

0 投票
1 回答
897 浏览

clojure - Java 与 Clojure 互操作,无法加载插件

我正在尝试在 Clojure 中编写一个 Bukkit 插件。

通常一个 Bukkit 插件需要重写Plugin类,有一个onEnable()和一个onDisable()方法。还有一些其他要求,例如结果在 JAR 文件中并定义了plugin.yml,但我拥有所有这些。

我的代码编译得很好,但是当我尝试在服务器中加载它时,我得到了这个异常:

0 投票
2 回答
185 浏览

java - 再次运行命令时变量未重置

我有一段代码可以输出玩家的总体体验。

问题是它输出的 XP 值不会改变,如果实际 XP 会改变。例如,在 50,000 级时,XP 为 2,147,483,647。当等级下降到 4 时,XP 值保持不变。

如何在运行后重置此值,以便重新检查 XP 并使用新数量更新变量?

0 投票
1 回答
2313 浏览

java - 没有从默认配置中复制任何值

我写了这段代码:

为了在 JAR 中获取这个config.yml文件并输出它:

但是当我这样称呼它时:

不复制任何值:

0 投票
1 回答
10108 浏览

java - 获取 YAML 路径下的所有节点

我有一个看起来像这样的 YAML 文件:

有没有办法让所有节点都下Main

0 投票
1 回答
8589 浏览

java - 保存玩家库存

处理允许转移世界的命令,我正在尝试保存玩家库存。

问题出在第 130 行:

我得到这个堆栈跟踪:

0 投票
2 回答
407 浏览

java - 检查 java 函数的返回如何改变函数执行的操作?

为什么函数 safeBreak() 会在 Call 1 中按预期执行,但在 Call 2 或 Call 2.1 中却没有?

我正在开发我的 Minecraft Bukkit 插件ToolBelt

我的插件中的一个工具(PickHax)允许玩家在持有定义的材质(默认 DIAMOND_PICKAXE)的同时删除一个块。为了为提供区域保护(如 WorldGuard)和日志记录(如 HawkEye)的其他插件提供尽可能广泛的支持,我创建并调用了 BlockBreakEvent。下面是执行此操作的代码:

在 ToolBelt 的当前版本 (0.1) 中,这非常有效,并且如果玩家没有服务器区域 (WorldGuard) 的权限,则不会删除块。我只是将目标Block设置为event.getClickedBlock(),将主体Player设置为event.getPlayer(),并将物理布尔值设置为,true如果他们左键单击,并且false如果他们右键单击。这是 0.1 版中的调用:

呼叫 1

我目前正在开发一个支持远程块删除的新版本。根据用户是否蹲下并具有范围权限节点,目标块由event.getClickedBlock()或设置subject.getTargetBlock(null,25)。除了在一种情况下,这很好用。

  • 案例 1:如果他们实际点击了块(LEFT_CLICK_BLOCK / RIGHT_CLICK_BLOCK),他们会看到变化,无论是物理设置。
  • 案例 2:如果他们在一定范围内获得了方块,并且有物理到true(LEFT_CLICK_AIR),那么他们会看到变化。
  • 案例 3:但是,如果他们在一定范围内获取了块,并且物理到false(RIGHT_CLICK_AIR),那么他们在客户端上看不到块更新。如果他们注销并重新登录,则更改是可见的,因此更改确实发生在服务器端。

为了缓解这个问题,我尝试使用subject.sendBlockChange(),它应该向用户发送虚假的块更改,而不是以任何方式修改服务器。有了这个,用户总能看到他们做了什么。因此新代码:

呼叫 2

但是,由于某种原因,只是运行safeBreak()和运行之间的变化if(safeBreak()) sendBlockChange()使得区域保护(WorldGuard)不受尊重。用户从 WorldGuard 获得打印输出,仍然警告他们没有构建权限,但模块仍然被破坏。

以防万一描述.sendBlockChange()不准确,它实际上并没有以任何方式改变世界,我还尝试了“无害”打印信息

调用 2.1

当我运行 Call 2.1 时,如果我在一个我有权破坏块的区域中,我会收到“错误仍然存​​在?” 消息,但是当我在禁区内时,我不会。这意味着safeBreak()如果我是否应该破坏一个块,它会返回正确的值,但不知何故仍在破坏块。另外,因为它没有.sendBlockChange()呼叫 2,所以我再次遇到案例 3 问题。

呼叫 3

现在代码除了检查 的返回值之外没有任何动作safeBreak(),但它仍然会破坏限制区域中的块。我切换到Call 1,它并没有打破禁区内的障碍。

这让我回到了最初的问题。我可以重新编译 ToolBelt.jar,唯一的区别是 Call 1 与 Call 2 并可靠地重现问题。如果调用 1 到位,则尊重区域支持,但案例 3 不会更新客户端。如果调用 2 到位,客户端始终会获得块更新,但他们可以删除任何区域中的块。

我可以通过不允许案例 3(范围内没有物理移除)并使用调用 1 来解决这个问题,但是我不想损害工具的能力。有谁知道为什么 Call 2 和 Call 2.1 在 Call 1 没有问题的情况下不适用于区域?

感兴趣的文档链接:

  • :代表一个块。这是一个活的物体,对于世界上的任何给定位置,可能只存在一个方块。

  • Player : 代表一个玩家,连接与否

  • .isCanceled():获取此事件的取消状态。取消的事件不会在服务器中执行,但仍会传递给其他插件

  • .sendBlockChange():发送块更改。这会为某个位置的用户伪造一个块更改数据包。这实际上不会以任何方式改变世界。

0 投票
1 回答
818 浏览

java - 创建另一个任务时取消延迟的任务

我目前有一个延迟任务,只要我点击一个按钮就会运行。单击按钮将布尔值切换为true7 秒后,延迟任务将其false再次设置为。

然而,如果一个人多次点击按钮,布尔值会被打开和关闭,打开和关闭等等,因为延迟的任务正在堆积。如果多次单击按钮而不是让所有延迟的任务相互堆积,有没有办法简单地延长延迟的任务?

因此,假设单击按钮后,延迟任务将等待 7 秒,然后将布尔值从 切换true为。false我将如何更改代码,以便如果在延迟任务尚未执行时再次按下按钮,它将取消前一个并简单地执行下一个延迟任务(我将它用于服务器,所以简单地取消前一个任务可能并不意味着这是实际延迟的任务,而是其他一些任务)?

0 投票
1 回答
938 浏览

java - 无法使用输出流发送命令

我正在尝试编写一个小型 Java 应用程序,它可以让我使用 Java Process/ProcessBuilder API 在屏幕外运行 Bukkit 服务器。

我能够很好地从服务器获取输出,但服务器不响应由Process.getOutputStream()(链接到进程输入流)返回的输出流写入的命令。

我尝试用我自己的测试代码来做这件事,它奏效了。System.in从接收到写入输出流的文本的单独进程读取。

Bukkit 是不听System.in还是怎么的?如果不是,那怎么可能?有任何想法吗?