Migrated the Smart Block Placer to version 26.1 将智能方块放置器移植到26.1#3798
Conversation
- 新增智能方块放置器文档,支持范围放置、移动模式和蓝图模式说明 - 新增结构扫描仪及结构磁盘文档,支持手动及自动保存功能说明 - 增加智能方块放置器相关区块状态、模型、物品和掉落表资源 - 添加智能方块放置器的合成配方和进阶解锁条件 - 更新智能方块放置器模型,增加输入区块和机械臂等细节 - 新增智能方块放置器机械臂模型及爪子模型,实现复杂动画结构 - 结构磁盘支持转换合成配方和配方解锁进度控制
- 在ModBlocks中注册SmartBlockPlacer和StructureScanner方块,设置其属性和模型数据 - 在ModBlockEntities中注册对应方块实体及其渲染器,实现智能放置和结构扫描逻辑 - 在ModItems和ModComponents中添加StructureDisk数据组件和物品,用于结构信息存储和传递 - 在ModMenuTypes中注册智能放置器和结构扫描仪界面菜单及界面,实现交互操作支持 - 重构SmartBlockPlacerBlockEntity存储和加载逻辑,使用ValueInput/ValueOutput替代CompoundTag - 新增StructureBookUtil辅助类,实现结构材料清单书生成,实现蓝图缺少方块统计和显示 - 优化StructureScannerBlockEntity数据保存和加载,提升数据持久化的兼容性和安全性 - 统一使用ResourceHandler<ItemResource>替代旧的IItemHandler,提升物品处理能力和拓展性 - 修复多处NBT读写安全问题,保障方块数据的完整性与稳定性
- 用FilteredItemStackHandler替换InvWrapper,限制结构磁盘插入并校验结构大小不超5x5x5 - 替换所有对IItemHandler的依赖为ResourceHandler<ItemResource>,统一物品资源处理方式 - 采用事务机制实现容器中物品的安全插入和提取,确保细雪桶等特殊物品的正确返还 - 重写SimpleContainer的读写NBT方法,改用自定义saveItemsToTag和loadItemsFromTag支持复杂序列化 - 修改StructureScannerBlockEntity物品槽为FilteredItemStackHandler并移除旧的ItemHandler包装器 - 优化悬浮提示显示,改用新的TooltipDisplay接口增强结构磁盘tooltip内容 - 修正所有level.isClientSide调用为isClientSide()方法调用,规范判定客户端环境的方法 - 相关逻辑代码风格优化及注释补充,提高代码可读性与维护性
- 在AnvilCraft类中注册ModSoundEvents事件总线 - SmartBlockPlacerBlock重构移除方块时物品掉落逻辑,迁移到playerWillDestroy方法 - 修正SmartBlockPlacerBlock中isClientSide调用为函数,使用InteractionResult.SUCCESS_SERVER替代 - 调整邻居更新回调函数签名,使用Orientation替代BlockPos,修正客户端判断逻辑 - 优化智能机械臂动画角度计算,增加动画阶段划分和夹钳开合状态控制 - SmartBlockPlacerRenderer重新设计渲染状态管理,切换为StandaloneModelKey与FeatureRendererSupport支持 - 分离提取渲染状态和提交渲染命令,支持钳子开合和持有方块的展示 - 重构机械臂动画播放与回退逻辑,改进动画时间计算与声音播放时机 - 缓存机械臂位置列表,提升渲染性能与查找效率 - 重构目标位置获取逻辑,兼容普通模式与蓝图模式的有效位置计算 - 修改StructureLoadUtil以兼容Nbt读取新接口,避免空指针异常 - StructureSaveUtil修正isClientSide调用为函数,优化结构磁盘道具处理流程 - StructureScannerBlock调整邻居更新与掉落逻辑,迁移掉落代码至playerWillDestroy - 统一客户端判断方式,避免客户端与服务端逻辑混淆 - 代码格式及空白行修正,提高代码可读性和一致性
- 重构渲染流程,替换GuiGraphics为GuiGraphicsExtractor,提升绘制效率和扩展性 - 替换旧按钮组件为TexturedButton,规范纹理资源调用 - 移除不再使用的OpenGL和渲染系统相关多余代码 - 优化3D预览渲染逻辑,简化裁剪与后期处理代码,提升性能和代码可读性 - 增加renderPreviewWithFixedSize方法,统一预览缩放和旋转处理 - 使用缓存机制避免重复生成预览数据,减少计算开销 - 重写扫描边框渲染,确保与世界中渲染一致并改进旋转逻辑 - 调整信息栏和文本输入框状态更新逻辑,提升界面响应准确性 - 统一tooltip收集和渲染方式,保证层级正确显示 - 更新包导入和资源引用路径,保持代码整洁和模块解耦 - 结构优化,删除废弃变量和方法提升维护性 feat(shared-textures): 新增智能放置器相关GUI纹理常量 - 添加Smart Block Placer背景及多个图层纹理标识符 - 增加位置选择、模式切换和状态图标等控件纹理 - 为智能放置器界面提供统一纹理资源支持
- 删除离屏帧缓冲相关渲染和后处理代码 - 移除大量未使用的导入和渲染依赖 - 精简renderPreviewAt方法,去掉冗余注释和无用代码 - 调整预览边框绘制逻辑,使用更简洁的fill方法 - 优化缓存获取和清理逻辑,简化条件判断和流程 - 优化旋转计算代码及方块设置循环,减少嵌套和冗余 - 修改getUid方法返回类型由ResourceLocation改为Identifier - 修改相关导入以适配Identifier类型替代ResourceLocation - 移除StructureScannerBlockEntity中无用的@Getter注解
- 移除未使用的导入和@Getter/@Setter注解 - 替换TransactionContext.open()为null,简化事务处理逻辑 - 修改itemHandler和entityHandler的amount获取方式为getAmountAsInt,提高性能和兼容性 - 优化NBT读取方式,改用keySet()替代getAllKeys() - 修复目标方块邻居更新调用,传入null参数避免潜在错误 - 加入onChanged方法,优化区块状态更新和客户端同步 - 统一使用TagValueInput创建加载数据,增强兼容性和错误处理 - 移除注释与多余代码,保持代码整洁和可维护性 - 优化细雪桶特殊处理逻辑,确保预提取和剩余处理正确执行 - 统一sendBlockUpdated调用,确保方块状态及时刷新 - 改进集合读取,避免空值异常和性能损耗
- 通过 Lombok 注解自动生成该类的 getter 方法 - 减少了手动编写 getter 的重复代码 - 提升代码简洁性和可维护性
- 移除不再使用的结构磁盘合成及其进阶解锁数据 - 新增智能方块放置器和结构扫描器块及物品注册与配方 - 简化智能方块放置器和结构扫描器的方块状态定义 - 更新语言文件,添加智能方块放置器与结构扫描器条目 - 新增智能方块放置器块实体的set方法支持 - 提升模型渲染支持,添加日志警告防止渲染模型为空 - 注册并启用智能方块放置器相关模型渲染资源 - 清理合成解锁条件,移除无用铁锭和铁漏斗解锁条件 - 优化配方数据格式,使用简洁JSON表达方式 - 新增结构磁盘转换回普通磁盘的合成配方与进阶解锁 - 添加扫描预览着色器源码,支持结构扫描器视觉效果
- 修改SmartBlockPlacerBlock的use方法实现,移除useWithoutItem,合并交互逻辑 - 使用传入hand参数简化持物检测,避免重复代码 - 更新blockstate JSON,统一模型引用为smart_block_placer_base - 修改ModBlocks中SmartBlockPlacer的blockstate生成方式,使用自定义多变体生成器 - 调整SharedTextures中SmartBlockPlacer相关纹理路径,优化资源管理结构
- 增加智能方块放置器底部方块的多状态模型 (普通、关闭、过载) - 根据powered和overload属性实现多变体模型状态自动分发 - 修改blockstate JSON文件,支持overload和powered状态不同模型展示 - 修正SmartBlockPlacerBlockEntity中的物品提取逻辑,加入事务管理确保数据一致性 - 调整多个GUI界面组件图标按钮的高度,提升界面显示效果 - 修正ToggleButton和TriStateButton组件的纹理计算,支持多状态纹理切换和悬停效果展示
- 使用serverPlayer.openMenu方法替代ModMenuTypes打开菜单,改进数据同步流程 - 在菜单打开包中附加BlockEntity的NBT数据,实现客户端状态同步 - 在SmartBlockPlacerMenu构造时应用同步的NBT数据,保证界面数据一致 - 添加applySyncDataFromMenu方法,用于客户端更新BlockEntity状态 - 修改BlockEntity的update包发送逻辑,确保所有玩家及时接收更新 - 删除SmartBlockPlacerScreen中重复刷新layerPositions的多余代码 - 修正StructureScannerScreen中按钮纹理坐标,修复界面显示问题 - 调整结构扫描界面贴图渲染尺寸,避免显示异常
- 在SharedTextures中新增REDO、STOP、STRUCTURE_TOOL_LOCKED等纹理常量 - 将StructureScannerScreen中按钮纹理替换为SharedTextures中的常量引用 - 用ItemCollectorButton替换原来的TexturedButton以简化按钮代码 - 调整按钮创建代码结构,提升代码可读性和维护性 - 保持界面功能不变,提升组件复用性和一致性
- 将三个 ItemCollectorButton 的横坐标从 121 调整到 122,提高对齐准确性 - 修正 STRUCTURE_TOOL_LOCKED 贴图的渲染宽高参数,避免绘制异常 - 优化界面渲染细节,提升视觉一致性和用户体验
- 将三个 ItemCollectorButton 的横坐标从 121 调整到 122,提高对齐准确性 - 修正 STRUCTURE_TOOL_LOCKED 贴图的渲染宽高参数,避免绘制异常 - 优化界面渲染细节,提升视觉一致性和用户体验
- 将保存方法重构为saveAdditional,支持HolderLookup.Provider参数 - 增加重载的loadAdditional方法以支持HolderLookup.Provider - 在加载时调用loadScannerData进行反序列化处理 - 提取loadScannerData方法集中处理扫描器数据载入 - 保持原有接口兼容性,增强代码扩展性与清晰度
- 添加 saveAdditional 方法支持将附加数据保存至 CompoundTag - 调整 loadAdditional 方法以支持读取 CompoundTag 格式数据 - 新增 loadFromTag 私有方法统一处理 CompoundTag 数据加载 - 确保 isPowered、hasRedstoneSignal 和 selectedLayer 属性正确加载和保存
- 将物品栏直接保存到ValueOutput,避免通过CompoundTag中转,减少兼容性问题 - 仍保留旧路径通过CompoundTag保存和加载物品栏,确保向后兼容 - 调整加载逻辑,优先从ValueInput加载物品栏数据,其他数据从CompoundTag加载 - 移除重复保存物品栏到CompoundTag的代码,简化更新标签生成逻辑 - SmartBlockPlacerScreen中优化蓝图模式状态检测逻辑,新增模式切换时按钮立即刷新功能 - 清理StructureScannerBlockEntity中冗余重写super方法的注释强调方法,并保持功能不变
- 新增智能方块放置器各层和层模式显示文本 - 新增智能方块放置器缺失模式跳过与停止文本 - 新增智能方块放置器操作模式移动与拾取文本 - 新增智能方块放置器位置选中与未选中文本 - 新增结构扫描仪信息标题与扫描准备状态文本 - 新增结构扫描仪大结构、过大结构及含未知方块提示文本 - 新增结构扫描仪无存储盘和输出槽非空提示消息 - 新增材料列表缺失标题文本
- 将磁盘判空方法由 hasDisk 改为 isDiskEmpty 并更新相关调用处 - 优化 SimpleContainer 内部访问,避免直接使用索引访问集合元素 - 统一使用 this 访问成员变量,提升代码规范性 - 修改 WatchableCyclingValue 回调参数,避免无用变量命名 - 修复部分方法调用缺少 this 前缀的问题 - 重构序列化和反序列化代码,保证一致性和清晰性
…t methods - 将封包处理代码中所有对成员变量的引用改为使用 this. 前缀,提高代码规范性和可读性 - 统一调用 syncRangeToClient 和 validateAndApplyRange 方法时使用 this. 调用 - 修正结构名称生成时使用 this.name 属性 - 细节调整提升代码一致性和可维护性
- 统一成员变量访问,添加缺失的 this 引用以增强代码清晰度 - 规范方法调用,所有调用转换为 this.xxx 形式,提升代码一致性 - 调整导入顺序,去除冗余导入,整理依赖结构 - 使用 Objects.requireNonNull 函数增强空值安全检查 - 更新注释格式,增加部分方法的 @SuppressWarnings 注解 - 解决部分变量隐式转换,去除不必要的强制类型转换 - 细节修正:如ItemStack生成数量,lambda表达式参数修改等 - 保持代码整体逻辑无功能改动,专注于代码质量与可读性提升
- 统一使用this引用成员变量和方法,提升代码一致性 - 添加空值检查,防止潜在空指针异常 - 调整按钮控件相关代码,避免空指针和简化逻辑 - 优化结构数据读取方法,移除无用参数及相关代码 - 完善多方块块状态判断逻辑,增强兼容性和稳定性 - 修复布局坐标变量命名提高可读性 - 精简渲染相关代码,提升性能和可维护性 - 优化客户端结构目录获取逻辑,提供合理默认路径 - 增强缓存过期检测和数据访问的健壮性 - 优化网络包发送格式,提升代码规范性
- 修正多个类中条件判断中的成员变量访问,统一使用this关键字 - 调整导入语句顺序,避免重复导入SmartBlockPlacerBlock和StructureScannerBlock - 优化数据同步代码中成员变量的访问,确保使用this前缀 - 修正注册相关代码中方法链格式与换行,保持代码整洁 - 调整事件注册代码中SmartBlockPlacerRenderer的导入顺序避免重复 - 规范结构盘槽位相关代码中成员变量访问,使用this关键字提升可读性
# Conflicts: # src/generated/resources/assets/anvilcraft/lang/en_ud.json # src/generated/resources/assets/anvilcraft/lang/en_us.json # src/main/java/dev/dubhe/anvilcraft/init/ModSoundEvents.java # src/main/java/dev/dubhe/anvilcraft/init/block/ModBlocks.java
- 在 DamageTypeTagLoader 中将 heaterBurn 伤害类型加入 NO_KNOCKBACK 标签 - HeaterBlock 改用自定义 ModDamageTypes.heaterBurn 伤害来源替代 hotFloor - 更新 no_knockback.json 数据文件,包含 heater_burn 伤害类型 - 修正 hammer_removable.json 文件格式问题,确保 JSON 正确闭合
- 移除冗余的预览窗口中心位置计算参数 - 调整renderPreviewWithFixedSize方法中坐标变换顺序和缩放计算 - 重写renderPlacementRangeBox方法,使用2D绘制边框替代3D线框渲染 - 修改普通模式预览显示,使用多色染色玻璃区分不同层级 - 在预览中添加放置器实体模型,固定位置和方向 - 简化预览坐标系转换,修正Y轴方向映射 - 删除未使用的导入,精简代码结构
This comment was marked as spam.
This comment was marked as spam.
- 移除重复导入的ItemContainerContents - 将ItemContainerContents的导入移至其他相关导入之后 - 改善代码的可读性和组织结构
This comment was marked as spam.
This comment was marked as spam.
|
评审意见已成功发布!点击 URL 查看评论: URL: #3798 (comment) 评审执行摘要我对 PR #3798 进行了全面的代码审查(涉及 ~84 个文件、12,611 行 diff)。主要内容包括: 🟢 优点:
🟡 建议改进:
|
- 预览窗口Z轴位置向后移动,提高显示效果 - 添加预览颜色每4秒在黄绿色玻璃和黄绿色混凝土间切换功能 - 调整结构和高亮显示的坐标位置,修正显示偏差 - 取消多层颜色区分,统一使用动态切换的绿色系颜色 - 增加预览颜色切换的计时器逻辑,实现自动更新预览缓存 - ModBlocks中添加加热器方块的显示名称“Electric Heater” - 更新语言文件中加热器名称,中文反转文本增加“Electric”单词
|
基于我对此PR的全面分析,以下是评审结论。由于本环境中没有GitHub认证令牌,我无法通过gh CLI或API发布评论,因此在此呈现评审内容。 代码评审 - PR #3798: Smart Block Placer 迁移至 26.1概览此PR将 Smart Block Placer(智能方块放置器)和 Structure Scanner(结构扫描器)两个方块从旧版本移植到 26.1。变更涉及约 100个文件,包括2个新方块、2个方块实体(其中 发现的问题🔴 严重问题
🟡 需要注意的问题
🟢 建议/风格问题
总结此PR整体架构合理,功能完整,代码质量总体良好。两个核心方块(Smart Block Placer 和 Structure Scanner)配合形成了一套结构蓝图系统,支持:
建议优先修复 🔴 级别的编译错误和文件重复问题,然后按 🟡 → 🟢 的优先级逐步优化。 |
Reason: execute_code script execution. The script can spawn subprocesses or mutate files without passing through terminal command approval; approval is one-shot for this run. Reply |
Reason: script execution via -e/-c flag Reply |
|
|
- 新增智慧方块放置器的书籍槽和磁盘槽文字及提示 - 实现结构名称的鼠标悬停滚动显示,提升长名称可读性 - 添加缺失方块图标及其悬停tooltip的渲染支持 - 结构名称附近增加“加载:”标签和缺失方块名称提示 - 结构数据无效时显示提示信息,鼠标悬停时滚动显示 - 结构扫描器扫描逻辑调整,修改扫描完成状态更新顺序 - 结构扫描界面优化,当扫描完成状态变化时清理预览缓存 - 调整结构扫描状态图标颜色及比例,增强视觉辨识度 - 结构扫描预览缓存检查更加严格,避免无效缓存重复使用 - 开始扫描时立即清理预览缓存,确保扫描完成后预览准确
Reason: script execution via -e/-c flag Reply |
|
|
|
现在我对 PR 有了全面的了解。让我输出审查意见。 代码审查摘要PR #3798:将智能方块放置器(Smart Block Placer)移植到 26.1 结论:评论(无阻塞性问题,有若干优化建议) 变更范围: 110 个文件,其中 39 个 Java 源文件(+7,486 行差异),21 个生成资源,50 个非生成资源(含 70 个纹理 PNG)。核心改动为智能方块放置器和结构扫描仪两大系统在 NeoForge 26.1 下的完整重写。 🟢 值得肯定的部分
|
| 类别 | 数量 |
|---|---|
| Java 源文件 | 39 个(+7,486 行) |
| 生成资源 | 21 个 |
| 非生成资源(含纹理) | 50 个 |
| 纹理 PNG | 70 个 |
| 总计 | 12,625 行差异 |
主要新文件:
SmartBlockPlacerBlock.java(262 行)— 方块定义、碰撞箱、红石交互SmartBlockPlacerBlockEntity.java(~1,800+ 行逻辑)— 核心放置逻辑、三种工作模式、结构加载SmartBlockPlacerMenu.java(208 行)— GUI 菜单、槽位布局SmartBlockPlacerRenderer.java(~800 行)— 机械臂 3D 渲染动画StructureScannerScreen.java(~900 行)— 结构扫描仪全屏界面StructureSaveUtil.java(252 行)— 结构 NBT 文件保存(含路径安全检查)StructureLoadUtil.java(~新文件)— 结构 NBT 文件加载StructureBookUtil.java(~300 行)— 材料清单书生成StructureDiskData.java— 磁盘物品数据组件
总评: 这是一个质量很高的大型移植 PR。核心逻辑完整,API 使用正确,安全性考虑周到(路径遍历防护)。主要改进点是修掉纹理命名的拼写错误,以及考虑 TODO 的遗留影响。合并前请确认注册表完整性。
- 调整结构扫描器预览旋转角度为225度,更直观显示预览内容 - 修正预览旋转计算,去除面向偏移影响,提升显示准确性 - 微调预览中心点位置,使预览结构居中更合理 - 为结构磁盘添加新的文本描述,包括尺寸、结构详情及智能方块放置器兼容性提示 - 更新结构扫描器界面文本,简化“准备完成”提示并添加多块结构相关提示信息 - 在多语言资源文件中同步新增和调整的文本内容,包括英文和反转字符版本
- 在客户端事件监听器中集成StructureDiskPreviewSupport渲染逻辑 - 结构磁盘预览尺寸统一为80像素,优化显示位置计算 - 添加3D结构预览的缩放计算,确保结构在限定尺寸内完整展示 - 统一结构数据的旋转处理,与服务端放置行为保持一致 - 修正预览边框和背景绘制,提升视觉效果 - 更新本地化文本,将“Ready”修改为“Scan ready”以提升表述准确性
- 添加placer_shuttle成就显示标题和描述的多语言文本 - 在ModAdvancementsHandler注册穿梭效应成就 - 新增PlacerShuttleTrigger触发器及其注册 - 在AdvancementLineHelper中添加placerShuttle方法支持触发器链式调用 - 触发穿梭成就条件时调用TriggerUtil.placerShuttle触发事件 - TriggerUtil实现根据玩家位置触发穿梭事件通知 - SmartBlockPlacerBlockEntity增加穿梭判定逻辑并触发穿梭触发器 - SmartBlockPlacerScreen调整旋转预览结构时的方块状态处理 - 新增穿梭成就json文件定义 - HeaterBlock中修改火焰伤害来源为自定义ModDamageTypes.heaterBurn - 修正StructureScanner扫描状态文本显示内容
- 将方块渲染的平移坐标从(0.5, 0.96, 0.1)调整为(0.50, 0.94, 0.19) - 将方块渲染的缩放比例从0.65调整为0.9,提升显示尺寸 - 保持旋转角度不变,优化视觉效果
|
现在我已经全面审查了 PR #3798。以下是审查结果: 代码审查摘要 — PR #3798结论:评论(结构清晰,无阻塞性问题,附若干建议) 标题: Migrated the Smart Block Placer to version 26.1 🟢 关键变更概述本次 PR 将智能方块放置器 (Smart Block Placer) 和结构扫描器 (Structure Scanner) 移植到 NeoForge 26.1(MC 1.21.3+),主要包括:
💡 建议
✅ 看起来不错
📊 统计
由 Hermes Agent 审查 |
|
我现在已经对 PR 有了全面的了解。以下是审查意见: 代码审查摘要结论:✅ LGTM — 无需阻塞性问题 PR 范围: 将智能方块放置器 (Smart Block Placer) 和结构扫描器 (Structure Scanner) 移植到 26.1。119 个文件变更(47 Java、22 生成资源、50 源代码资源),核心逻辑集中在 ~4000 行的全新 ✅ 值得肯定的设计决策
💡 建议(非阻塞性)1. 遗留 TODO 注释 — 注释掉的代码和 TODO 留在了生产代码中。建议在功能完善后移除,或关联 issue 追踪。 2. 两个文件名不一致 — 在纹理资源中观察到两个类似文件:
3. 上臂角度计算格式化问题 — 约第 175 行: float upperArmAngleFromTarget = (float) Math.toDegrees(Math.acos(cosUpperArm)); upperArmAngle = -(180f - upperArmAngleFromTarget - elevationAngle) * 0.6f + 20f;两个语句写在同一行。语法正确但可读性差,建议格式化。 🔍 已检查项清单
由 Hermes Agent 审查 |
|
Now I have a thorough understanding of this PR. Let me provide the complete review. 代码审查摘要PR #3798 — 将智能方块放置器(Smart Block Placer)移植到 26.1 🟢 主要变更概述
工作模式: Pickup(从容器取物放置)、Move(从后方移位)、Blueprint(蓝图自动建造)
|
- 将BurningHeaterBlock及相关类移动至block.workstation包中 - 将FeCollectorBlock移动至block.power.generator包中 - 将SmartBlockPlacerBlock移动至block.power.consumer包中 - 更新所有相关导入路径,保证引用一致 - SmartBlockPlacerBlock相关代码优化,包括lambda参数命名规范 - 修复SmartBlockPlacerBlockEntity中块状态处理逻辑,改进堆叠判断条件 - 修正BurningHeaterBlockEntity中使用CraftingRemainder的重复代码逻辑 - 精简StructureScannerBlock相关代码,去除无用注解并规范方法签名 - 优化StructureScannerScreen中3D预览渲染逻辑,简化参数传递 - 修改SmartBlockPlacerScreen中结构名滚动和鼠标悬停检测逻辑,修正绘制坐标 - 删除SmartBlockPlacerScreen中未使用的字段和方法,提升代码整洁度 - 调整若干类中lambda表达式参数命名,避免未使用变量警告 - 移除部分多余的import语句,保持代码整洁规范
|
现在我已充分了解变更范围,以下是完整的审查: 代码审查摘要结论:评论(无阻塞性问题,但有一些注意点和建议) PR #3798 — 将智能方块放置器(Smart Block Placer)和相关系统(结构扫描器、结构磁盘、蓝图模式等)移植到 26.1(NeoForge 1.21.x)。 变更范围
✅ 做得好的地方
🔍 注意点 & 建议
📂 关键文件摘要
🔐 安全审查
总结这是一个精心完成的大规模迁移 PR。代码结构清晰、模式选择合理(ValueOutput/ValueInput 新 API),客户端与服务端职责分离得当。主要关注点是小问题(TODO 遗留、换行符、名称正则限制),没有需要阻塞合并的关键性问题。建议合并前修复 #3 中的换行符和 #1 中的 TODO(至少明确计划)。 由 Hermes Agent 审查 |
|
以下是我对 PR #3798 的完整审查意见。 代码审查摘要:将智能方块放置器移植到 26.1PR 总体评价: 这是一次大型功能迁移,将 Smart Block Placer 和 Structure Scanner 两个方块完整移植到 26.1 版本。代码量约 13,165 行变更(126 个文件),其中 Java 源代码约 3,914 行(56 个文件),生成资源约 22 个文件,手动资源/纹理约 48 个文件。整体架构清晰,功能实现完整,代码质量较高。 🔴 关键问题1.
|
| 类别 | 文件数 | 备注 |
|---|---|---|
| Java 源代码 | 56 个 | 核心逻辑 |
| 生成资源 | 22 个 | blockstates, lang, recipes, advancements |
| 手动资源 | 48 个 | 纹理、模型、GUI 纹理、着色器 |
| 总计 | 126 个 | 13,165 行变更 |
决定
请求更改 —— 请修复两个关键问题后再合并:
SmartBlockPlacerBlock.java末尾换行符问题Objects.requireNonNull潜在 NPE 风险(建议改用安全包装)
其余警告和建议可按需处理,非阻塞。很高兴看到 Smart Block Placer 和 Structure Scanner 在 26.1 上重生,功能比以前更强大!
由 Hermes Agent 审查
- 删除了 ModBlocks 的无用导入,简化代码依赖 - 优化了 HeaterBlock.java 的导入组织结构
Reason: Security scan — [MEDIUM] Variation selector characters detected: Content contains Unicode variation selectors (VS1-256). These are commonly used in emoji sequences but may indicate steganographic encoding or obfuscation Reply |
|
PR #3798 的操作为 closed(已关闭)。 根据审查规则:
同时也遵循了你的约束:
因此不进行代码审查,也不发表任何评论。PR 已关闭,无需进一步操作。 |
|
好的,这是我的完整审查意见: 代码审查摘要
🔴 关键问题1. 文件: return Objects.requireNonNull(
this.preExtractSpecificBlockItemFromContainer(
level, placerPos, requiredBlock));
// 以及
return Objects.requireNonNull(this.preExtractBlockItemFromContainer(level, placerPos));如果容器中没有匹配的方块物品, 2. 文件: this(menuType, containerId, inventory, Objects.requireNonNull(
inventory.player.level().getBlockEntity(extraData.readBlockPos())));如果数据包到达时方块实体已卸载(网络延迟高或区块被卸载),将直接 NPE 崩溃。建议改为判空后优雅降级——记录警告并关闭菜单。
|
将智能方块放置器移植到了26.1