Lib99j

Lib99j

服务器端开发的另一个实用库模组。

基础库

关于

这是一个作为我所有模组基础的模组。欢迎随意使用。

库功能

  • VFX,包括锁定摄像机、叠加层等
  • 服务端 GUI 纹理
  • 服务端粒子
  • 隐藏 Boss 栏
  • 自定义效果
  • 思索(Ponder)
  • 简易配置创建
  • 以及更多……

用法

在模组初始化时,请运行 Lib99j.ensureLoaded()。这会强制该库先于你的模组加载,从而让所有功能正常工作

build.gradle(版本号来自 modrinth)

repositories {
	maven { url = 'https://dj.ucc.asn.au/maven/' }
}

dependencies {
  implementation include("com.daniel99j:djutil:1.1")
  implementation include("com.daniel99j:lib99j:VERSION")
}

思索(服务端)

这是 Create 模组思索系统的重制版,现在运行在服务端。示例见 https://modrinth.com/mod/ponderplus。

功能:

  • 无需客户端模组
  • 跳过、回退和暂停
  • 如果与 Polydex 或 Booklet 一同安装,单击即可打开思索
  • 快速
  • 不改变玩家——服务端和客户端都不知道你正在思索,一切都在网络层面发生
  • 完全自包含
  • 不产生真实世界变化
  • 可与 Polymer 和服务端模组(以及客户端模组!)配合使用

控制(游戏内 HUD 会显示这些):

  • F:识别——飞行时会显示你正在看的东西
  • SPACE:暂停/播放
  • Q:退出
  • L:打开菜单
  • S:重启场景
  • D:下一个场景(如果可能)
  • A:上一个场景(如果可能)
  • 滚动:选择要跳转到的步骤
  • W:跳转到所选步骤

命令:

/ponder all <id>
/ponder item <item>
/ponder item <item> scene <id>
/ponder item hand
/ponder item hand <id>
/ponder scene pause
/ponder scene unpause
/ponder scene exit

开发者命令:

/ponder dev ui_creator -> 打开 UI 创建器。
/ponder dev ui_creator_from <ponder command> -> 在运行指定的思索命令后打开 UI 创建器
/ponder dev toggle_free_movement -> 在思索场景中切换自由移动
/ponder dev get_edits -> 列出在自由移动模式下对世界所做的所有交互

UI 创建器:

  • 染色玻璃显示安全区域
  • 打开菜单 [L] 开始编辑
  • 如果在客户端,在菜单中按住 Shift 可查看光标所在的思索 UI 坐标,CTRL-C 复制

演示视频:

游戏属性

  • enableHideableBossbar() 使黄色 Boss 栏变为白色,并使用 BossBarVisibility 可以让任意 Boss 栏不可见
  • enableCustomEffectBadLuck() 使霉运效果显示为 “Custom Effect (/polymer effects)” 并拥有自定义图标
  • enablePonder() 启用思索(见上文)
  • enableAddingAssetTranslationsToServer() 使 assets 文件夹中的所有 lang 文件在 Nucleoid Server Translations API 中被视为服务端翻译

配置

  • Lib99j 还提供了一个易于使用的配置 API
  • 支持按世界、通用、仅客户端和仅服务端配置选项
  • 可选的客户端同步
  • 使用 cloth config 作为界面
  • 在游戏内以服务端对话框形式重制 cloth config(/lib99j config {modid})
  • 支持 Mod Menu
  • 通过 GSON 进行 JSON 序列化
  • 在所有配置界面和配置文件中自动支持基本类型、标识符、vec2、vec3、颜色
  • 使用 ConfigManager.addConfig(modid, modconfig) 添加配置。每个 ModConfig 为每个上下文包含一个可为空的 ConfigHolder。只需提供一个配置类即可完成
  • 使用 ServerConfigCopy.getConfigOption(modid, serializedName, optionClass, fallback) 从服务端获取同步选项(选项必须标注 sync = true)

示例配置类:

public class ExampleConfig {
    @ConfigEntry
    public boolean testBool = true;

    @ConfigEntry(sync = true)
    @SerializedName("wavy_ui")
    public boolean wavyUi = false;

    //Object primitives work too!
    @ConfigEntry(min = 0, max = 10000)
    public Integer explosionDamage = 10;

    @ConfigEntry(displayType = ConfigDisplayType.SLIDER, max = 50, min = 0)
    public int explosionSize = 10;

    @ConfigEntry(displayType = ConfigDisplayType.COLOUR_PICKER)
    public int worldTint = 0xff00ff;

    @ConfigEntry(displayType = ConfigDisplayType.COLOUR_PICKER_ALPHA)
    public int overlayColour = 0xff0000ff;

    @ConfigEntry
    public Identifier packId = Identifier.withDefaultNamespace("test");

    @ConfigEntry
    public Vec2 spawnRotation = Vec2.ZERO;

    @ConfigEntry
    public Vec3 spawnPos = Vec3.ZERO;

    //ChatFormatting is an Enum
    @ConfigEntry
    public ChatFormatting formatType = ChatFormatting.RED;
}

模组安装状态

  • 使用 ModInstallManager.syncInstalledStatus(modid) 标记你的模组以同步其安装状态,然后使用 ModInstallManager.isInstalled(modid, player) 检查客户端是否安装了该模组

GUI 工具

  • 默认情况下,Lib99j 生成的字体空格范围为 -256 到 256(注意,例如使用 space=270 时,它会组合使用 256 和 14!)。使用 GuiUtils.getSpace() 及相关函数
  • GuiUtils.nextPage()、GuiUtils.previousPage() 和 GuiUtils.head() 创建用于 GUI 的玩家头颅
  • GuiUtils.doesPlayerHaveMods() 让你查看已安装的模组,更多信息请阅读文档
  • GuiUtils.toast() 显示一个带有自定义物品和文本的进度弹窗
  • 现在是重点部分!
  • GuiUtils.generateTexture() 和 GuiUtils.generateColourableTexture() 创建一个 GuiElementBuilder,并自动生成物品模型和定义。纹理格式:"examplemod"、"ui/test/image"。注意其他基础路径也可接受,但建议使用 /ui/,因为其他函数仅使用该路径
  • GuiUtils.generateBarTexture() 创建一个从下到上垂直填充的条形,包含基础、填充和叠加层。
  • BackgroundTextures 是一个基础的基于物品栏的字体背景生成器,例如:new BackgroundTexture(Identifier.fromNamespaceAndPath(MagmaNetworkMod.MOD_ID, "test/test_ui"), 176)。使用 /ui/ 作为纹理引用。

VFX

  • VfxUtils.shake() 产生类似基岩版的镜头抖动效果
  • VfxUtils.addGenericScreenEffect() 添加许多其他客户端效果,例如:
  • RED_TINT——红色世界边界色调
  • SNOW——细雪叠加层
  • FIRE——顾名思义
  • NAUSEA——你懂的。
  • BLACK_HEARTS——凋零之心
  • GREEN_HEARTS——中毒之心
  • GREEN_HUNGER——绿色饥饿值
  • BLINDNESS——失明效果
  • NIGHT_VISION——夜视效果
  • CONDUIT_POWER——潮涌能量效果
  • DARKNESS——监守者黑暗效果
  • LOCK_CAMERA_AND_POS——更复杂,接下来解释。
  • 摄像机锁定
  • 要锁定玩家的摄像机和移动,添加 LOCK_CAMERA_AND_POS 效果
  • setCameraInterpolation、setCameraPos、setCameraPitch 和 setCameraYaw 控制锁定摄像机的各个方面
  • 由于技术原因,玩家无法看到快捷栏,游戏看起来像是在旁观者模式
  • registerCameraLockHandler 为一个来源 ID 注册摄像机锁定处理器,提供摄像机旋转和玩家
  • 其他
  • VfxUtils.clientSideExplode() 产生一个销毁方块的客户端爆炸(仅在客户端)。仅用于过场动画,因为幽灵方块有 bug
  • VfxUtils.fireworkExplode() 创建一个烟花爆炸,就像真的生成了一个烟花一样
  • VfxUtils.sendFakeEntity() 发送一个客户端实体。注意它通常永远不会被移除,因此仅建议与闪电或其他会自动移除的实体一起使用

粒子

开发中功能,可能会造成严重的服务端卡顿。 待我有时间时会进行重做。

其他

  • PlayPacketUtils 包含所有 PLAY 数据包的列表
  • ConfigUtils 有一些基本的配置函数
  • GameProperties 有一些开关和关于游戏的信息

本项目与 Create 模组、Ponder 或任何类似模组均无关联。