API,就是应用程序接口。MinecraftAPI就是Minecraft的编程接口。链接上MinecraftAPI,就可以把Minecraft玩得更嗨~~ import mcpi.minecraft as minecraft 首先要将API包包导入进来,才可以开始使用MinecraftAPI,否则是玩不成的。 mc = minecraft.Minecraft.create() 得到Minecraft对象,使用这个对象来进行进一步的调用。 pos = mc.player.getTilePos() 这个API 是与玩家“player”相关的,意思是得到玩家当前的坐标。坐标在Minecraft里是非常重要的基础数据,很多时候编程要围绕着坐标展开。 b = mc.getBlock(pos.x, pos.y-1, pos.z) 此API可以根据坐标来取得与坐标相关的方块ID,所以说坐标真的是十分重要。 if b == block.AIR.id or b == block.WATER_STATIONARY.id or b == block.WATER_FLOWING.id:mc.postToChat("not safe") 上面意思就是如果取得的方块ID是空气或者是水,则弹出对话框“not safe”。 events = mc.events.pollBlockHits() 这是Minecraft与事件相关的API,表示的是与玩家打击一个方块相关的事件(鼠标右键,不是左键)。 pos = e.pos 取得这个事件发生的坐标位置。还得再强调一次坐标在Minecraft中的重要性。 if pos.x == diamond_pos.x and pos.y == diamond_pos.y and pos.z == diamond_pos.z: mc.postToChat("HIT") 例如下图,如果玩家机打的是确定某个位置的钻石方块,则提示“HIT”。 Minecraft的API种类非常非常丰富,一点点去了解,会让我们玩起来其乐无穷~ |
我们的程序和Minecraft游戏可以理解为两个分隔两地的人,两者之间要进行沟通怎么办?
是不是要借助某种工具?比如电话、微信、QQ等等。
这种工具是否需要两者都能够使用?
Minecraft API即Minecraft的应用程序接口,可以理解为Minecraft游戏留给我们用程序跟游戏沟通的工具!
备注:我们用的Minecraft API就是第1节课讲的mcpi目录的文件,这也是为什么.py程序必须创建在mcpi目录的同级目录中。
(1)首先打开服务器和游戏
(2)通过API连接游戏
注意!#表示注释,用于解释程序,程序运行时不执行这些代码,我们可以不输入这些内容!
第二步:获取玩家的位置pos = mc.player.getTilePos()#网络课件中第6页pos = mc.player.getTilepos()有错误。#mc.player.getTilePos()为获取用户当前位置的方法#变量pos为mc.player.getTilepos()方法的返回值#返回值即方法执行后留给调用者的可用的值,不同方法、函数的返回可能不同。具体概念可在扩展中详细了解#pos变量代表的数据由x,y,z三部分组成,通过print语句可以输入这三部分内容print(pos.x)print(pos.y)print(pos.z)#注意!不是每个变量都可以用pos.x这样的形式表示某一部分数据pos变量用3个print语句太繁琐,而且程序设计者之外的人可能根本就不明白输出的3个值什么意思!
因此,我们改进程序将3个语句合并为1个语句。
通过前两步我们已经可以获取玩家的所在位置,但是有一个缺点,每次运行程序,只能获取一个坐位置,再移动玩家,就获取不了位置,只能再次运行程序!如何动态获取玩家位置?
4.1 导入time模块time是Python自带的关于时间的模块。
import time#通过import语句导入time模块time.sleep(1)#time.sleep()方法可以让程序暂停执行一定时间,单位为秒#演示代码为1,即暂停1秒,()内的值可以修改,要求为整数。格式:
while 条件: 子代码块条件为True时,执行子代码块注意:子代码块整体要缩进!
4.3 动态获取玩家位置代码:
import timeimport mcpi.minecraft as minecraftmc = minecraft.Minecraft.create()while True: time.sleep(1) pos = mc.player.getTilePos() mc.postToChat("x=" + str(pos.x) + "y=" + str(pos.y) + "z=" + str(pos.z))代码解读:
#导入使用到的模块import time import mcpi.minecraft as minecraftmc = minecraft.Minecraft.create()#使用API连接游戏while True: #死循环,监听游戏 time.sleep(1) #每次循环暂停1秒钟,要不然一直后面输出太快,我们就不容易看到后面输出的结果 pos = mc.player.getTilePos() #获取玩家当前位置 mc.postToChat("x=" + str(pos.x) + "y=" + str(pos.y) + "z=" + str(pos.z)) #利用postToChat()方法在游戏中输出玩家的位置注意!因为while循环中条件一直为True,所以子代码块一直执行,而且子代码块未引入退出循环的机制,这样程序就无法正常退出,只能强制停止程序(在终端中同时按下ctrl键和c键)。
while True:这种形式的循环一般用于监听事件,等待用户执行某种操作,例如当代用户输入用户名、密码,用户输入完成之后退出循环,如果用户未完成输入,一直循环,等待用户完成输入。
我的世界(Minecraft)是一款沙盒建造游戏,于2009年5月17日发行,由瑞典游戏设计师马库斯·阿列克谢·泊松开创,现由Mojang Studios维护,2014年11月,微软(Microsoft)斥资25亿美元收购了Mojang Studios ,Mojang Studios 的业务也已经正式转移至了微软Xbox部门。2016年,微软、Mojang Studios 和网易联合宣布,Mojang Studios 将《我的世界》中国大陆地区的独家运营权正式授予网易公司。
游戏模式Minecraft大部分游戏模式的主要游戏内容(Gameplay)是在一个随机生成的世界中放置和破坏各种方块。利用这些方块,玩家可以改造游戏世界,建造和破坏建筑结构。
Minecraft中的五大游戏模式为:生存模式、创造模式、冒险模式、极限模式和旁观模式。
创造模式(Creative Mode)是Minecraft中主要的游戏模式之一。创造模式移除了游戏中的生存内容,并且允许玩家方便自由地创造和破坏结构与机械。
在创造模式中,玩家拥有无限数量的方块用于创造,没有生命值和饥饿值来阻碍他们的建造。创造模式允许玩家在没有拿剑时瞬间破坏大多数的方块,包括像基岩和末地传送门这种正常情况下不能破坏的方块,除隐形基岩等。使用一次性的物品也不会使其被消耗。
创造模式给予玩家飞行的能力。玩家可通过快速按两下空格起飞,并通过按住空格上升高度,或通过Shift降低高度和着陆;使用WASD(默认值)可在同一高度下移动。另外,玩家在空中快速按两下空格可离开飞行状态并掉下来。在Java版中,飞行时碰到方块表面时(降落在方块上时),玩家会自动离开飞行状态;基岩版中则不会(但速度仍会降到行走的速度)。飞行时进入矿车和床后再离开后,玩家将仍然处于飞行状态。
玩家在创造模式中无法受到伤害。掉进虚空过深仍会导致玩家死亡,但是玩家只要不掉到y低于-64时就不会受到伤害,且玩家可以在虚空中飞行。这是在创造模式中除了通过/kill命令和外部修改器外唯一的死亡方法。与旁观模式类似,基岩版的玩家在创造模式下不会受到任何伤害。
在多人游戏中,管理员可以通过/gamemode命令单独切换每一位玩家的游戏模式。这意味着在一个生存模式的世界中(根据管理员的意愿)玩家也可以使用创造模式,反之亦然。新玩家的默认游戏模式也能通过/defaultgamemode命令来切换。
craftbukkit服务器启动后,可在控制台中输入命令。
输入op 用户名可将某用户指定为管理员,这样就拥有在服务器上执行命令的权限。
输入help,即可列出所有命令
查看命令的详细帮助,可以使用如下命令格式:help 命令
用户进入游戏后界面下方是物品栏,默认9个空间。下方右侧即手中的方块。前方的立方体和准星即当前用户放置或摧毁方块的位置。
用户按E打开/关闭背包,打开背包后可将背包中不同种类的方块放置在快捷物品栏,以供用户快速放置。用户按Q键可丢弃手中的方块,按F键可切换手中方块。
用户可以使用鼠标左键摧毁方块,鼠标右键放置方块,鼠标中键或滚轮切换物品。
用户可以使用WASD 上左下右移动方位。
用户可以按一次空格进行跳跃。
用户快速按两次空格将进行飞行,在飞行过程中可以按空格提升高度,按shift下降高度。在飞行中快速按两次空格将快速落地。
用户按ESC键可以显示系统菜单。
其中菜单中比较重要的是选项>控制,在这里可以查看\修改默认快捷键。
坐标(coordinates)在数字上反映了玩家在世界中的位置。
坐标基于一个由互相垂直且交于一点(即原点)的三条坐标轴形成的网格,即一个空间直角坐标系。坐标系的单位长度为一个方块长,基于测量方法,每一方块为1立方米。
F1隐藏用户图形界面
F2截图
F11全屏切换
F3显示调试信息
F3+Q显示F3帮助信息
time set 0先设置当前时间为白天
gamerule doDaylightCycle false再关闭昼夜循环
Minecraft中文维基:https://minecraft-zh.gamepedia.com/Minecraft_Wiki