自动生成 Wiki 所需数据。
此项目可以自动下载 Minecraft 客户端或服务端,并进行反混淆,之后使用 ASM 注入代码以达到各种自动化操作。
绝大多数注入点都是稳定的,即随着游戏版本变化相关的注入点不会产生变化。同时,注入代码也尽量使用最少的导入,以减少版本变化带来的影响。
所有注入点可在io.github.nickid2018.genwiki.RemapSettings中找到。
此项目可以直接生成 Wiki 所需要的 Java 版自动值。
所有数据将生成在run/output下。
- 属性
attribute_default_value:属性默认值。attribute_range:属性值域。attribute_sentiment:属性类型。
- 生物群系
biome_base_temperature:基础温度。biome_creature_probability:生物生成概率。biome_fog_color:雾颜色。biome_foliage_color:树叶颜色。biome_has_precipitation:是否有降水。biome_sky_color:天空颜色。biome_spawn_data:生物生成数据。biome_water_color:水颜色。biome_water_fog_color:水中雾颜色。
- 方块:
block_breaking_tools:合适挖掘工具。block_burn_odds:烧毁几率。block_destroy_time:破坏时间(硬度)。block_explosion_resistance:爆炸抗性。block_ignite_by_lava:熔岩可燃性。block_ignite_odds:引燃几率。block_instrument:乐器。block_legacy_solid:固体方块。block_liquid_computation:用于计算睡眠高度的方块数据。block_map_color:地图颜色基色。block_occlusion_shape:方块遮挡形状。block_properties:方块具有的方块属性。block_property_value:所有的方块属性。block_push_reaction:活塞推拉行为。block_redstone_conductor:红石导体。block_replaceable:可替代方块。block_suffocating:窒息方块。block_support_type:方块支撑属性。
- 附魔 / 魔咒
enchantment_cost:附魔等级限制。enchantment_incompatible:不共存魔咒。enchantment_max_level:最大等级。enchantment_primary_items:可附魔台附魔物品。enchantment_support_items:可附魔物品。enchantment_weight:魔咒挑选权重。
- 实体
entity_mob_category:(暂无译名,控制周期生成)。entity_sync:实体网络同步数据。
- 游戏规则
game_rule_category:游戏规则分类。game_rule_default_value:游戏规则默认值。game_rule_type:游戏规则数据类型。
- 物品
item_attribute_modifiers:物品属性修饰符。item_burn_duration:烧炼时间(游戏刻计)。item_creative_mode_tabs:创造模式标签页。item_default_components:物品堆叠默认组件。item_food_properties:食物属性。item_max_damage:最大耐久度。item_max_stack_size:最大堆叠数量。item_rarity:物品基础稀有度。
- 状态效果与药水效果
mob_effect_cannot_affect:免疫此状态效果的生物。mob_effect_category:状态效果类别。mob_effect_color:状态效果颜色。mob_effect_instantenous:瞬时状态效果。postion_effect:药水效果。
有两种办法生成此数据:
- 使用 GitHub Action 自动构建(
autovalue),只需要输入需要生成数据的版本,然后触发工作流即可。 - 将项目克隆到本地,设置环境变量
MAKE_VERSION为需要生成数据的版本,之后执行gradlew run。
此项目可以生成方块与生物群系的统计数据。
所有数据将生成在run/runtime下,每个文件的名字以<dimension>_<item>_count.json命名,其中<dimension>为维度,<item>
为统计类型(block方块或biome生物群系)。
每个文件包含下列几项数据:
worldSeed:世界种子。minHeight:最低高度。- 对于方块,高度为 Y 坐标。对于生物群系,高度为生物群系单元(4×4×4方块大小)的坐标。
maxHeight:最高高度。posProvider:区块位置提供器。count:当前统计的区块数量。total:总区块数量。blockSize:分块大小。seed:(仅随机选择区块)随机种子。
block/biome:统计数据。- 键值对,键为命名空间 ID,值为每个高度上的数量。
生成数据有两种办法:
使用 GitHub Action 构建:
注意:此方法不能统计大量区块,因为当前程序具有无法解决的内存泄漏。
可以使用工作流statistics,输入需要生成数据的版本,然后触发工作流即可,获得工件(一个 JAR)。
之后,设置以下环境变量:
BATCH_SIZE:(默认为 4)每个游戏刻提交给区块生成系统的区块数量。CHUNK_TOTAL:(默认为 25000)统计的区块总数量。BLOCK_SIZE:(默认为 1089,必须为完全平方数,否则将向上寻找完全平方数)分块大小。分块越大,一段时间内的运行速度会更快,但也会造成更高程度的内存占用。CHUNK_POS_PROVIDER_FACTORY:(默认为continuous)区块位置提供器工厂。random:以分块为单位随机选择区块。continuous:连续选择区块,以世界原点为中心。
DIMENSIONS:(默认为空)以逗号分隔的维度列表,不为空时代表仅处理指定的维度。
在同目录下,创建eula.txt,并写入eula=true。
在同目录下,创建server.properties,并写入以下内容:
max-tick-time=-1
sync-chunk-writes=false
pause-when-empty-seconds=1000000000最后,执行java -jar <JAR> -nogui即可。
使用本地构建:
将项目克隆到本地,设置环境变量MAKE_VERSION为需要生成数据的版本,WORLD_TOTAL为总体存档的数量,ASYNC_COUNT为同时运行
Minecraft 实例的数量,并将上述 4 个环境变量设置好后,执行gradlew runStatistics。
下面为一个简单的环境变量测试用例:
MAKE_VERSION=1.21.4
BATCH_SIZE=16
CHUNK_POS_PROVIDER_FACTORY=random
WORLD_TOTAL=20
ASYNC_COUNT=4
BLOCK_SIZE=2500
CHUNK_TOTAL=500000此项目可以使用 Minecraft 原版渲染管线渲染 Wiki 所需的标准视图。
运行有两种方式:
使用 GitHub Action 构建:
可以使用工作流iso,输入需要生成数据的版本,然后触发工作流即可,获得工件(一个 JAR)。将此 JAR 替换掉启动器内<对应版本>.jar
即可。
使用本地构建:
将项目克隆到本地,设置环境变量MAKE_VERSION为需要生成数据的版本,之后执行gradlew runISO。项目将自动作为一个简单的启动器运行客户端。
使用此项目需要一个虚空预设的超平坦世界(主要是防止其他方块影响渲染,如果要渲染正常的世界也可以)。在进入世界后,使用 F1 隐藏 GUI,以防止渲染时渲染到玩家手臂。
所有命令都在聊天栏输入,且不需要正斜杠/:
persp:切换为透视投影。ortho:切换为正交投影。nosave:阻止自动保存,防止渲染过程中计时因保存出现延迟。save:允许自动保存。从禁用自动保存到允许自动保存后,游戏会在下一个游戏刻立刻保存。flatlight:当物品展示实体渲染时,使用扁平物品光照渲染。blocklight:当物品展示实体渲染时,使用3D物品光照渲染。levellight:不修改物品展示实体的渲染,使用维度的基础光照。glinttick:让附魔光效不再跟随现实时间计算,而是根据此命令的调用次数,即对齐游戏刻。resetglint:将glinttick的计数器清空,并使游戏重新使用现实时间渲染光效。wsize <宽度>x<高度>:设置渲染窗口大小,控制最终渲染图片大小。osize <宽度>x<高度>:设置正交投影的近平面和远平面的大小。call <命令>:调用一个命令,命令不需要以正斜杠开头。sshot [文件名称]:渲染截图,文件名称为可选参数,不填则使用默认名称screenshot.png。所有文件都将保存在screenshots文件夹下。skiptick:什么也不做,用于run中跳过一次操作(本质上跳过一次游戏刻)。run <文件名>:运行一个执行脚本,执行脚本内的命令会被逐行执行,每游戏刻会进行一次操作。可用命令与上文一致,但不包含run命令,且新增了sleep <时间>命令以等待一段时间。文件中空行和以#开头的行将被忽略。
举例来说,如果需要渲染一个石头的标准视图,可以使用以下脚本:
CALL tick freeze
CALL fill 24 -61 24 -8 -61 -8 air
CALL tp @s 1.5 -0.3035 1.5 135 30
WSIZE 300x300
OSIZE 1.6x1.6
ORTHO
CALL setblock 0 0 0 stone
SKIPTICK
SSHOT stone.png
如果不使用脚本,则SKIPTICK不需要执行,所有CALL也可以直接调用正常命令而不需要使用这些命令调用。