当前位置: 首页 > 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.hskmm.com/?act=detail&tid=21620

相关文章:

  • Jenkins+IIS+Bonobo.Git.Server 搭建适用dotnet开发者的小团队的devops环境
  • JDK17新特性梳理
  • 完整教程:Nginx 高级配置指南:Rewrite、If判断、浏览器分离与防盗链
  • 数据结构学习随笔 第一章
  • 函数-参数+作用域
  • 用 Nim 实现英文数字验证码识别
  • 抓紧上车,别再错过啦, Github 开源后台管理平台,Naive UI !!!
  • 深入解析:【网络编程】套接字入门:网络字节序与套接字种类剖析
  • 地产行业,居然还有这样的开发商 - 智慧园区
  • Tita项目与绩效一体化管理:重构组织效能的数字化中枢
  • 实用指南:电子电气架构 --- 智能座舱域环境感知和人机交互系统
  • 强化学习(二十二)-MADDPG
  • GLM-4.6与DeepSeek-V3.2-Exp发布
  • 2025.9.30——1黄
  • 【半导体物理 | 笔记】第二章 半导体中杂质和缺陷能级
  • 基于内容可信空间的医疗行业机遇研究报告
  • v-show会导致重绘还是重排?
  • M3-Agent:看见、听见、记住与推理:具备长期记忆的多模态智能体
  • 20250930
  • 阿里云发布《AI 原生应用架构白皮书》
  • NVR接入录像回放平台EasyCVR智慧农田可视化视频监控方案
  • sql server 版本查询
  • Matlab dsp工具箱可以实现定点FFT的功能
  • MySQL悲观锁(排他锁)级别
  • Swagger 3.0 + Knife4j 入门到实战:Spring Boot API 文档搭建、注解详解与生产环境安装
  • 打破信息孤岛,构建统一视界:视频融合平台EasyCVR在智慧校园建设中的核心作用
  • Linux ssh/scp/sftp命令利用及免密登录配置
  • PySimpleGUI 中有哪些可以单独使用的函数?
  • Learning Continuous Image Representation with Local Implicit Image Function
  • Fastadmin开发两个APP端,接口token验证