路线图
Paper提供了一个丰富的API,具有广泛的功能,可以帮助你充分发挥服务器的潜力。 然而,为了给新功能和改进腾出空间,一些旧的API将被逐步淘汰。本页面 旨在记录任何计划中的API变更或可能即将到来的弃用。
未来计划
接口化的ItemStack
当你创建ItemStack时,你创建的是ItemStack的API表示。
然而,在某些地方你也可以获得由NMS对象支持的ItemStack。
这可能导致不一致性和不必要的维护工作,因为我们需要维护我们自己的ItemStack实现,并且还要
通过丑陋的方法支持NMS支持的对象,因为它不是一个简单的接口。
在未来,ItemStack将被转换为一个接口,允许开发者直接使用底层的
ItemStack,而不是通过API实现。
注意事项
- 避免直接扩展
ItemStack类。- 不支持此类的自定义实现。
ServerPlayer重用
注意:仅适用于NMS使用,不适用于API。
避免直接存储玩家(ServerPlayer)实体实例。目前,在切换
世界时会重用玩家实例,但在未来,这种行为将恢复为匹配原版行为。API实体(包装器)将
继续工作,并且会自动替换其底层实例。
这样做是为了帮助减少在原版和Paper之间切换世界时可能出现的不一致性。
弃用政策
强烈建议你避免使用任何标记为已弃用的API。
如果你继续使用已弃用的API,你的服务器可能会变得不稳定,可能无法按预期工作。 你也可能遇到性能问题和其他问题。为了确保插件获得最佳体验和长期 可用性,重要的是要跟上最新的API变更,避免使用任何标记为 弃用的API。
标记为@Deprecated的API不应该在你的代码库中使用,
因为可能有替代的API可以使用。虽然某些API可能在被弃用后仍然可以工作,
但不能保证这些API将来不会被标记为待移除。
@Deprecated
public void exampleMethod(); // 示例已弃用方法
标记为待移除
除了标记为@Deprecated外,API还可能被标记为forRemoval,并给出
@ApiStatus.ScheduledForRemoval版本。
计划移除的API应该只在Minecraft的主要版本更新中发生。
强烈建议你迁移到不使用计划移除的API。
应该注意的是,计划移除的API将给予足够的时间让插件开发者迁移 到其他API。
@ApiStatus.ScheduledForRemoval(inVersion = "1.20")
@Deprecated(forRemoval = true)
public void exampleMethod(); // 示例在1.20中标记为移除的方法
弃用原因
API可能因多种可能的原因而被弃用。 一些常见的API弃用原因是:
旧API
随着游戏的发展,API可能代表核心游戏中不再存在的概念。
旧API很可能在较新版本的游戏中无法正常工作和/或可能表现异常, 因此可能会被计划移除。
重复的API
由于Paper过去是从Spigot下游而来,它有时可能包含与Paper已有的API冲突的Spigot添加的API。 通常,Paper会弃用Spigot的API,转而使用自己的API。
然而,在上游提供更强大的API的情况下,Paper的API可能会被弃用。
过时的API
Paper致力于改进可能已经包含的API。在某些情况下,我们可能已经构建了新的 API作为另一个API的替代品。
过时的API预计在很长一段时间内都能正常工作,可能在相当长的时间内 不会被计划移除。