Spigot插件开发:Bedwars物品生成器掉落铁锭报错求助
问题排查与解决方法
1. 首要严重问题:无限循环创建定时任务
你外层套的while(true)会不断重复创建20tick间隔的定时任务,运行几秒后服务器就会因为任务过载崩溃,必须直接去掉这个外层循环,只需要调用一次runTaskTimer就能实现周期性执行的效果。
2. Material.IRON_INGOT报错的解决方案
报错通常是两个原因:
- 没有导入对应的Material类,在代码头部添加导入语句:
import org.bukkit.Material; - 如果你使用的是非常旧的Bukkit/Spigot核心版本,确认核心版本对应API的铁锭枚举名就是
IRON_INGOT即可
3. 额外空指针风险修复
你当前获取世界的逻辑在没有玩家在线时会得到null,触发空指针异常,建议直接根据生成器绑定的世界名获取世界,提前做非空校验。
修正后的可用代码
// 只需要执行一次即可启动周期性生成任务 task = Bukkit.getServer().getScheduler().runTaskTimer(Main.plugin, () -> { // 替换为你实际的地图世界名称 World w = Bukkit.getWorld("world"); if (w == null) return; String[] pos = Main.blue_spawn.split("\\*"); Location loc = new Location(w, Double.parseDouble(pos[0]), Double.parseDouble(pos[1]), Double.parseDouble(pos[2])); // 第二个参数可调整每次掉落的铁锭数量 w.dropItemNaturally(loc, new ItemStack(Material.IRON_INGOT, 1)); }, 20, 20);
内容的提问来源于stack exchange,提问作者Sysy
相关产品推荐
相关产品推荐

