问题标签 [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.
bash - bash 中的缓冲管道
我在 Linux 机器上运行 Bukkit (Minecraft) 服务器,我希望使用服务器的命令正常关闭服务器,并使用命令行在stop
特定时间挂起计算机。pm-suspend
这是我所拥有的:
(我已经编辑了,/etc/sudoers
所以我暂停时不必输入密码。)
问题是,当它处于perl -e
睡眠状态时,服务器期待一个恒定的字节流,(这是我的猜测。我可能误解了一些东西。)所以它打印出它收到的所有空内容,占用宝贵的资源:
有没有缓冲管道之类的东西?如果没有,有什么方法可以将延迟输入发送到脚本?
php - 使用 fsockopen 连接到服务器 - 连接被拒绝
我想做的是在我的网站上添加对 Votifier 插件的支持。
我已经为 Minecraft 服务器转发了正确的端口,测试并确认它们是打开的。还使用Minestatus确认 Votifier 插件工作正常。
但是,当我尝试使用我找到的 PHP 脚本连接到服务器时,我得到的只是连接被拒绝。
似乎 Votifier 正在断开连接,可能是因为加密不正确?
clojure - Java 与 Clojure 互操作,无法加载插件
我正在尝试在 Clojure 中编写一个 Bukkit 插件。
通常一个 Bukkit 插件需要重写Plugin
类,有一个onEnable()
和一个onDisable()
方法。还有一些其他要求,例如结果在 JAR 文件中并定义了plugin.yml,但我拥有所有这些。
我的代码编译得很好,但是当我尝试在服务器中加载它时,我得到了这个异常:
java - 再次运行命令时变量未重置
我有一段代码可以输出玩家的总体体验。
问题是它输出的 XP 值不会改变,如果实际 XP 会改变。例如,在 50,000 级时,XP 为 2,147,483,647。当等级下降到 4 时,XP 值保持不变。
如何在运行后重置此值,以便重新检查 XP 并使用新数量更新变量?
java - 没有从默认配置中复制任何值
我写了这段代码:
为了在 JAR 中获取这个config.yml文件并输出它:
但是当我这样称呼它时:
不复制任何值:
java - 获取 YAML 路径下的所有节点
我有一个看起来像这样的 YAML 文件:
有没有办法让所有节点都下Main
?
java - 保存玩家库存
处理允许转移世界的命令,我正在尝试保存玩家库存。
问题出在第 130 行:
我得到这个堆栈跟踪:
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():发送块更改。这会为某个位置的用户伪造一个块更改数据包。这实际上不会以任何方式改变世界。
java - 创建另一个任务时取消延迟的任务
我目前有一个延迟任务,只要我点击一个按钮就会运行。单击按钮将布尔值切换为true
7 秒后,延迟任务将其false
再次设置为。
然而,如果一个人多次点击按钮,布尔值会被打开和关闭,打开和关闭等等,因为延迟的任务正在堆积。如果多次单击按钮而不是让所有延迟的任务相互堆积,有没有办法简单地延长延迟的任务?
因此,假设单击按钮后,延迟任务将等待 7 秒,然后将布尔值从 切换true
为。false
我将如何更改代码,以便如果在延迟任务尚未执行时再次按下按钮,它将取消前一个并简单地执行下一个延迟任务(我将它用于服务器,所以简单地取消前一个任务可能并不意味着这是实际延迟的任务,而是其他一些任务)?
java - 无法使用输出流发送命令
我正在尝试编写一个小型 Java 应用程序,它可以让我使用 Java Process/ProcessBuilder API 在屏幕外运行 Bukkit 服务器。
我能够很好地从服务器获取输出,但服务器不响应由Process.getOutputStream()
(链接到进程输入流)返回的输出流写入的命令。
我尝试用我自己的测试代码来做这件事,它奏效了。System.in
从接收到写入输出流的文本的单独进程读取。
Bukkit 是不听System.in
还是怎么的?如果不是,那怎么可能?有任何想法吗?