You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minecraft Python开发width>depth时交换x/z变量后无法生成泳池问题

问题原因

你只交换了坐标向量的x/z值,没有同步交换width和depth的取值,当width>depth时:

  • x/z坐标轴互换后,x轴方向应该对应原本的depth长度、z轴对应原本的width长度,但后续所有生成逻辑仍使用原有的width、depth参数计算方块范围,会导致setBlocks的起止坐标大小颠倒。mcpi的setBlocks要求第一个参数的各维度坐标必须小于第二个参数,否则不会生成任何方块,这就是width>depth时无结构生成的核心原因。
  • 另外注意你贴出的代码里>是HTML转义字符,实际运行的代码中需要替换为>,否则判断条件会直接失效。

修复方法

  1. 交换x/z坐标的同时,同步交换width和depth的值,后续所有计算统一使用实例属性self.width、self.depth,不要混用入参
  2. 修正后的判断逻辑如下:
if width > depth:
    # 交换x/z坐标
    temp = self.vec.x
    self.vec.x = self.vec.z
    self.vec.z = temp
    # 同步交换宽深取值
    temp = self.width
    self.width = self.depth
    self.depth = temp
  1. 调整fillpool方法的调用传参,使用实例属性而非原入参:
self.fillpool(self.vec.x, self.vec.y, self.vec.z, self.width, self.depth)

额外优化建议

你可以封装一个安全生成方块的工具方法,自动修正setBlocks的起止坐标大小,避免后续其他逻辑出现同类问题:

def safe_set_blocks(x1, y1, z1, x2, y2, z2, *args):
    x_min, x_max = min(x1, x2), max(x1, x2)
    y_min, y_max = min(y1, y2), max(y1, y2)
    z_min, z_max = min(z1, z2), max(z1, z2)
    mc.setBlocks(x_min, y_min, z_min, x_max, y_max, z_max, *args)

内容的提问来源于stack exchange,提问作者Mitch Callahan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:27:01