照猫画虎

本机地址:127.0.0.1

mc中 按T 说话

# 导入Minecraft Pi的Python API模块并创建连接
import mcpi.minecraft as mmc
mc = mmc.Minecraft.create()  # 连接到游戏

# 初始化变量
lst = []         # 用于存储玩家点击的两个坐标点
block_lst = []   # 用于存储区域内的方块信息
count = 1        # 点击计数器(1表示等待开始,2表示等待第二个点)
n = 1            # 主循环控制标志(0退出程序)

# 主程序循环
while n:
    # 检查聊天栏事件(玩家输入的内容)
    for e in mc.events.pollChatPosts():
        if e.message == '1':  # 当玩家输入1时开始选点流程
            count = 1         # 重置点击计数器
            mc.postToChat('请点击第一个方块')
            
            # 开始收集两个坐标点
            while count < 3:  # 需要收集2个点(count从1到3)
                # 检查方块点击事件
                for e in mc.events.pollBlockHits():
                    if e:  # 如果检测到点击事件
                        # 获取点击位置的坐标
                        x,y,z = e.pos.x,e.pos.y,e.pos.z
                        lst.append((x,y,z))  # 存储坐标到列表
                        count += 1  # 点击计数器+1
                        
                        # 根据点击次数显示提示信息
                        if count == 2:  # 第一次点击后
                            mc.postToChat(f'请点击第二个方块已存储坐标:,{x},{y},{z}')
                        elif count == 3:  # 第二次点击后
                            mc.postToChat(f'两个坐标已经获取:,{lst[0][0]},{lst[0][1]},{lst[0][2]},和,{lst[1][0]},{lst[1][1]},{lst[1][2]}')
                            break  # 退出当前循环
                            
        elif e.message == '0':  # 当玩家输入0时退出程序
            n = 0

# 计算两个坐标点的最小和最大坐标(确定立方体区域)
minx = miny = minz = maxx = maxy = maxz = 0
# 比较X坐标
if lst[0][0] < lst[1][0]:
    minx, maxx = lst[0][0], lst[1][0]
else:
    minx, maxx = lst[1][0], lst[0][0]
    
# 比较Y坐标
if lst[0][1] < lst[1][1]:
    miny, maxy = lst[0][1], lst[1][1]
else:
    miny, maxy = lst[1][1], lst[0][1]
    
# 比较Z坐标
if lst[0][2] < lst[1][2]:
    minz, maxz = lst[0][2], lst[1][2]
else:
    minz, maxz = lst[1][2], lst[0][2]

# 遍历立方体区域内的所有方块
for x in range(minx, maxx+1):      # X轴范围(+1包含终点)
    for y in range(miny, maxy+1):  # Y轴范围
        for z in range(minz, maxz+1):  # Z轴范围
            # 获取方块的类型ID和附加数据(比如羊毛颜色)
            block_msg = mc.getBlockWithData(x,y,z)
            bid = block_msg.id     # 方块ID(比如1是石头,2是草)
            bdata = block_msg.data # 附加数据(比如羊毛颜色值)
            block_lst.append((bid,bdata))  # 存储方块信息

mc.postToChat('方块信息已获取')
print(block_lst)
# 将方块信息发送到聊天栏
#! 将所有的xyz的差距记录
if lst[0][0] > lst[1][0]:
    xlen = lst[0][0] - lst[1][0]
else:
    xlen = lst[1][0] - lst[0][0]
if lst[0][1] > lst[1][1]:
    ylen = lst[0][1] - lst[1][1]
else:
    ylen = lst[1][1] - lst[0][1]
if lst[0][2] > lst[1][2]:
    zlen = lst[0][2] - lst[1][2]
else:
    zlen = lst[1][2] - lst[0][2]

dx = dy = dz = 0
mc.postToChat('请敲击一个方块,接下来会从这个方块开始建造')
count = 0
while 1:
    for e in mc.events.pollBlockHits():
        if e :
            dx,dy,dz = e.pos.x,e.pos.y,e.pos.z #! 建造位置
            break
    if dx :
        for j in range(dx,dx+xlen+1): #! dx为初始建造位置
            for k in range(dy,dy+ylen+1):
                for l in range(dz,dz+zlen+1):
                    mc.setBlock(j,k,l,block_lst[count][0],block_lst[count][1])
                    count += 1
        mc.postToChat('建造完成')
        break

  • Avatar photo

    宁妄

    一个热爱自然却被困在代码世界的“人”

    Related Posts

    综合复习

    1️⃣ 认识Python Python就像和电脑说话的“魔法…

    牛马耕地

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注