当前位置: 首页 > news >正文

【MC】我的世界schematic方块坐标提取转为json

前言

主包最近在搞mc广州塔灯光效果的复刻计划(请看合集),由于主包没学过着色器编程,但是目前而言,最大的问题已经转化为只要控制每个方块的灯光颜色就够了。
所以想着用three.js做个轻量化的广州塔灯光模拟器,然而广州塔的造型比较复杂,用简单的双曲线模拟的效果和应用在游戏中的广州塔的效果完全不同。
但又觉得用代码在canvas中画方块很麻烦,所以就想有什么办法将所有mc的方块坐标导出成json格式,让three.js读取来搭建出来。
因此才有了这篇文章

步骤

  1. 用创世神mod把想要导出的区域导出为schem或schematic格式,见详细教程
  2. 在Schemat导入上一步的schem或schematic文件,这个文件一般在 版本目录\config\worldedit\schematics
  3. 按F12进入控制台,输入以下代码,即可输出当前原理(schematic)的方块坐标数据
const schematic = renderer.schematicManager.getFirstSchematic();  
const schematicWrapper = schematic.getSchematicWrapper();
console.log(schematicWrapper.blocks());
  1. 右键点击输出内容,“复制为object”,把复制内容粘贴到一个新的txt文件保存,再将txt文件扩展名改为 .json
  2. 需要用以下python代码删除空气方块和其他不必要的属性,即可完成schematic方块坐标提取为json文件,之后就能利用这个json文件做更多的事情了
点击查看代码
import json
import osdef process_json_file(file_path):try:# 读取JSON文件with open(file_path, 'r', encoding='utf-8') as file:data = json.load(file)# 检查数据是否为数组if not isinstance(data, list):print("错误:JSON文件内容不是一个数组。")return# 过滤掉name为"minecraft:air"的元素filtered_data = [item for item in data if item.get('name') != 'minecraft:air']# 移除每个元素的properties属性,因为对于后续导入到three.js中没什么必要for item in filtered_data:if 'properties' in item:del item['properties']# 覆盖原文件保存with open(file_path, 'w', encoding='utf-8') as file:json.dump(filtered_data, file, indent=2)print(f"文件处理成功,已保存到: {file_path}")except FileNotFoundError:print(f"错误:文件未找到 - {file_path}")except json.JSONDecodeError:print("错误:文件内容不是有效的JSON格式。")except Exception as e:print(f"发生未知错误: {str(e)}")def main():print("JSON文件处理器")file_path = input("请输入JSON文件路径: ")# 检查文件是否存在if not os.path.exists(file_path):print(f"错误:文件不存在 - {file_path}")returnprocess_json_file(file_path)if __name__ == "__main__":main()
后记

为什么要如此麻烦?

A: 因为schematic存储的方块数据是二进制的,主包不知道这一长串01组成的数据要怎么转译成有用的数据,因为网上也查不到其他有用的资料

为什么不直接加入Schemat,编写一个script专门提取坐标数据为json?

A: 因为这个网站需要正版账户才能登录,而且他们github项目也好多bug,而且关键的导入文件的操作是用wasm写的看不懂@A@。。。

http://www.jsqmd.com/news/6517/

相关文章:

  • 电脑开机显示屏表现无信号怎么办 原因及解决方法
  • JDK17新特性梳理
  • 函数-参数+作用域
  • 用 Nim 实现英文数字验证码识别
  • 思路探索:当大型语言模型遇见数据分析的现实挑战 - 教程
  • 抓紧上车,别再错过啦, Github 开源后台管理平台,Naive UI !!!
  • 实用指南:电子电气架构 --- 智能座舱域环境感知和人机交互系统
  • 【机器学习】朴素贝叶斯法 - 实践
  • 【Rust GUI开发入门】编写一个本地音乐播放器(8. 从文件中提取歌曲元信息) - Jordan
  • Tita项目与绩效一体化管理:重构组织效能的数字化中枢
  • 深入解析:【网络编程】套接字入门:网络字节序与套接字种类剖析
  • 地产行业,居然还有这样的开发商 - 智慧园区
  • 【半导体物理 | 笔记】 第三章 半导体中的载流子分布
  • vscode提交github时报错:fatal: origin does not appear to be a git repository
  • 2025.9.30——1黄
  • VMware vSphere Replication 9.0.4 发布 - 虚拟机复制和数据保护
  • 【半导体物理 | 笔记】第二章 半导体中杂质和缺陷能级
  • VMware Live Site Recovery 9.0.4 发布 - 数据中心灾难恢复 (DR)
  • 【kafka】基于python发送kafka消息
  • VMware Tools 13.0.5.0 发布 - 客户机操作系统无缝交互必备组件
  • 使用openresty+lua来实现grafana中自动切换实时群集/历史群集对应的vmselect
  • 【python】根据给定的协议,解析一个hexdump 字符串
  • 读博期间的工作节奏与身心状态管理经验总结
  • 【Rust GUI开发入门】编写一个本地音乐播放器(7. 制作歌词显示面板) - Jordan
  • 基于内容可信空间的医疗行业机遇研究报告
  • 2025 年成型机厂商最新权威推荐排行榜:冷弯 / 光伏支架 / 门业等设备企业精度耐用性测评底樑/光伏支架/C型钢/彩钢瓦/快速门成型机厂商推荐
  • .Net Core MVC + Vue + SignalR 实现 后端数据主动推送到前端
  • js 获取下一个月时间和下一年的时间
  • 【Rust GUI开发入门】编写一个本地音乐播放器(5. 制作音乐列表组件) - Jordan
  • 【Nordic】nRF9151的SLM例程常用AT指令说明