
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()产生一个销毁方块的客户端爆炸(仅在客户端)。仅用于过场动画,因为幽灵方块有 bugVfxUtils.fireworkExplode()创建一个烟花爆炸,就像真的生成了一个烟花一样VfxUtils.sendFakeEntity()发送一个客户端实体。注意它通常永远不会被移除,因此仅建议与闪电或其他会自动移除的实体一起使用
粒子
开发中功能,可能会造成严重的服务端卡顿。 待我有时间时会进行重做。
其他
PlayPacketUtils包含所有 PLAY 数据包的列表ConfigUtils有一些基本的配置函数GameProperties有一些开关和关于游戏的信息
本项目与 Create 模组、Ponder 或任何类似模组均无关联。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。