游戏模式-API

游戏模式-API

这是一个用于创建自定义相机和自定义鼠标控制及交互的伪游戏模式的基础API。这仍然是一个正在进行中的项目。

图书馆

游戏模式 API

这是一个基础 API,用于创建具有自定义摄像机、自定义鼠标控制和交互的伪游戏模式。

此功能仍在开发中。

设置自定义游戏模式

自定义摄像机

只需使用你的自定义设置创建一个新的 ServerCameraSettings 实例(参见官方文档)。

内置摄像机模式:

  • topDown
  • sideView
  • isometric
  • isometric2(功能相同,但构造函数更完整)

俯视图示例:

ServerCameraSettings cameraSettings = new ServerCameraSettings();
cameraSettings.positionLerpSpeed = 0.2F;
cameraSettings.rotationLerpSpeed = 0.2F;
cameraSettings.distance = 20.0F;
cameraSettings.displayCursor = true;
cameraSettings.sendMouseMotion = true;
cameraSettings.isFirstPerson = false;
cameraSettings.movementForceRotationType = MovementForceRotationType.Custom;
cameraSettings.eyeOffset = true;
cameraSettings.positionDistanceOffsetType = PositionDistanceOffsetType.DistanceOffset;
cameraSettings.rotationType = RotationType.Custom;
cameraSettings.rotation = new Direction(0.0F, (-(float)Math.PI / 2F), 0.0F);
cameraSettings.mouseInputType = MouseInputType.LookAtPlane;
cameraSettings.planeNormal = new Vector3f(0.0F, 1.0F, 0.0F);
CameraTemplates.set("myCustomTemplate", cameraSettings);

自定义鼠标控制

要创建自定义鼠标控制,请创建一个继承 AbstractMouseControl 的新 Java 类,并重写鼠标按钮的抽象方法。默认的鼠标控制适用于俯视图,但不太适用于其他视图。

抽象类处理鼠标事件分发和一些数据解析,但如果你需要更多控制,可以重写它。

创建摄像机实例

现在,在你的插件的 setup() 方法中,创建 cameraSetting、MouseControle 类,然后使用以下代码创建摄像机实例:

new CameraInitializer("myInstanceName", new myCustomMouseControle(), false, "myCameraTemplate");

false 是一个仍在开发中的设置,用于使玩家隐形;它有效但会导致客户端崩溃,所以我建议将其保持为 false

使用可用默认选项的示例:

new CameraInitializer("isometricCamera2", new DefaultMouseControl(), false, "isometric");

将摄像机应用于玩家

要应用或移除自定义游戏模式,只需将 PlayerPOVComponent 添加到玩家身上。如果该组件已经存在,不要忘记先移除它,否则将无法正确注册。

PlayerPOVComponent pPOV = store.getComponent(ref, PlayerPOVComponent.getComponentType());
if (pPOV != null)
    store.removeComponent(ref, PlayerPOVComponent.getComponentType());
store.addComponent(ref, PlayerPOVComponent.getComponentType(), new PlayerPOVComponent(name));

自定义命令

  • /camera 用于单个摄像机管理的命令组
    • /camera get 获取当前摄像机实例的名称
    • /camera reset 将所有摄像机、控件和设置重置为默认值
    • /camera set <cameraInstanceName> 应用给定的摄像机配置
  • /cameraGroup 用于全局摄像机管理的命令组
    • /cameraGroup activate <cameraInstanceName>
    • /cameraGroup deactivate <cameraInstanceName>

禁用的摄像机组会将所有正在使用它的玩家重置为默认状态,并且玩家在重新启用前无法使用该配置


技术问题和仍在开发中的内容

隐藏玩家功能是一个存在的设置,但游戏中未使用,其目的是实现一种旁观者模式。我尝试使用它,并且在某种程度上是有效的,但它似乎与 MouseControle 有不良交互,并持续导致客户端崩溃(服务器不崩溃)。

ECS 部分有些笨拙,但我想使用组件时,找不到其他更清洁的方法。

我正在研究如何通过某些事件(例如加入特定实例或使用特定物品)来自动化该过程,但我需要一个可行的逻辑和方法,使其模块化以便于配置。

欢迎任何反馈和建议,以改进这个想法。