Minecraft API

This is a reference of Minecraft Python API Library, which is supported on Minecraft: Pi edition and the PC version using the RaspberryJuice plugin.

原链接:https://www.stuffaboutcode.com/p/minecraft-api-reference.html
源代码:https://github.com/martinohanlon/mcpi
https://github.com/zhuowei/RaspberryJuice

This is a reference of Minecraft Python API Library, which is supported on Minecraft: Pi edition and the PC version using the RaspberryJuice plugin.

似乎缺少生物相关的api?难道生物也是block?

pip install mcpi 

一、代码结构

  • minecraft.py
    • Class Minecraft - main class for connecting and interacting with the game
      • Class camera - changing camera angle and postion
      • Class player - getting and changing the players position and setting
      • Class entity - getting and changing entities position and setting
      • Class events - retreiving events which have occured in the game
  • block.py
    • Class Block - definition of a block, specifically its type
  • event.py
    • Class BlockEvent - definition of a block event, specifically what event, what block and what player
  • vec3.py
    • Class Vec3 - generic class for managing a 3 dimension vector (i.e. x,y,z)
  • connection.py - internal module used by the api
  • util.py - internal module used by the api

Compatability
Not all functions and block types are available on all version of the api, by each function you will see a logo which shows whether that function is available:

二、API 明细

import mcpi.minecraft as minecraft 
import mcpi.block as block 

1.Minecraft

"Main class for interacting with the Minecraft world, includes functions for creating a connection, modifying players and blocks and capturing events"

.create(address = "localhost", port = 4711)

"Create connection to Minecraft (address, port) => Minecraft object"

mc = minecraft.Minecraft.create() #use default address and port 
mc = minecraft.Minecraft.create("192.168.1.1", 4711) #specify ip address and port 

.getBlock(x,y,z)

"Get block (x,y,z) => id:int"

blockType = mc.getBlock(0,0,0) #retrieves the block type for the block at 0,0,0 

.getBlocks(x0,y0,z0,x1,y1,z1)

"Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]"

blocks = mc.getBlocks(-1,-1,-1,1,1,1) #get the block id's in a cuboid for block in blocks: print block 

.getBlockWithData(x,y,z)

"Get block with data (x,y,z) => Block"

blockObj = mc.getBlockWithData(0,0,0) #retrieves a block object for the block at 0,0,0 

.setBlock(x,y,z)

"Set block (x,y,z,id,[data])"

mc.setBlock(0,0,0,block.DIRT.id) #sets a block at an x, y, z co-ordinate to a particular type 
mc.setblock(0,0,0,block.WOOD.id, 1) #sets a block to a particular type and 'subtype' 

.setBlocks(x0,y0,z0,x1,y1,z1,blockType, blockData)

"Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])"

mc.setBlocks(-1, -1, -1, 1, 1, 1, block.STONE.id) #sets many blocks at a time, filling the gap between 2 sets of x, y, z co-ordinates 

.getHeight(x,z)

"Get the height of the world (x,z) => int"

y = mc.getHeight(0,0) #find the y (vertical) of an x, z co-ordinate which represents the 'highest' (non-air) block 

.getPlayerEntityIds()

"Get the entity ids of the connected players => [id:int]"

entityIds = mc.getPlayerEntityIds() #get the entity id's of the players connected to the game for entityId in entityIds: print entityId 

.getPlayerEntityId(playerName)

"Get the entity id for a named player => [id:int]"

entityId = mc.getPlayerEntityId("martinohanlon") #get the entity id of a name player 'martinohanlon' print entityId 

.saveCheckpoint()

"Save a checkpoint that can be used for restoring the world"
Available on Minecraft: Pi Edition

mc.saveCheckpoint() 

.restoreCheckpoint()

"Restore the world state to the checkpoint"
Available on Minecraft: Pi Edition

mc.restoreCheckpoint() 

.postToChat(message)

"Post a message to the game chat"

mc.postToChat("Hello Minecraft World") #write 'Hello Minecraft World' to the chat window 

.setting(setting, status)

"Set a world setting (setting, status). keys: world_immutable, nametags_visible"
Available on Minecraft: Pi Edition

mc.setting("world_immutable", True) #change world immutable to True 
mc.setting("nametags_visible", False) #change nametags_visible setting to False 

2.Minecraft.player

.getPos()

"Gets the player's position in the world as a Vec3 of floats (decimal numbers), if the player is in the middle of a block x.5 is returned"

playerPos = mc.player.getPos() #get players position as floats 

.setPos(x,y,z)

"Moves the player to a position in the world by passing co-ordinates ([x,y,z])"

mc.player.setPos(0.0,0.0,0.0) #set the players position as floats 

.getTilePos()

"Gets the position of the 'tile' the player is currently on."

playerTile = mc.player.getTilePos() #get the position of the tile the players is on 

.setTilePos(x,y,z)

"Move the player to a tile position in the world by passing co-ordinates ([x,y,z])"

mc.player.setTilePos(0,0,0) #set the position of the tile the player is on 

.setting(setting, status)

"Set a player setting (setting, status). keys: autojump"
Available on Minecraft: Pi Edition

mc.player.setting("autojump", True) #change the autojump setting to True 

.getRotation()

"Get the rotational angle(旋转角度-水平) (0 to 360) for the player => [angle:float]"

angle = mc.player.getRotation() #get the rotation of the player print angle 

.getPitch()

"Get the pitch angle(俯仰角度-垂直) (-90 to 90) for the player => [pitch:float]"

pitch = mc.player.getPitch() #get the pitch for the player print pitch 

.getDirection()

"Get unit vector of x,y,z for the player's direction => [Vec3]"

direction = mc.player.getDirection() #get the player's direction print direction 

3.Minecraft.entity

The entity functions are used in conjunction with the .getPlayerEntityIds() function to interact with the entity (or players) 玩家 in a game. Entity functions are useful for multiplayer games.

entity -  players - 玩家, mc.entity 和 mc.player的区别,player适用与单人,entity适用于多人。 API的设计上似乎有些冗余?还没仔细看这样设计的好处是什么,可以将参数entityId放在最后,默认是0表示当前玩家。
纠正一下之前的理解,entity 指的是生物。

entityIds = mc.getPlayerEntityIds() #get the entity id's of the players connected to the game
1stEntityId = entityIds[0]
2ndEntityId = entityIds[1]
...

.getPos(entityId)

"Gets an entities position in the world as a Vec3 of floats (decimal numbers), if the entity is in the middle of a block x.5 is returned"

entityPos = mc.entity.getPos(entityId) #get first entity position as floats 

.setPos(entityId,x,y,z)

"Moves the entity to a position in the world by passing co-ordinates ([x,y,z])"

mc.player.setPos(entityId,0.0,0.0,0.0) #set the players position as floats 

.getTilePos(entityId)

"Gets the position of the 'tile' the entity is currently on."

entityTile = mc.entity.getTilePos(entityId) #get the position of the tile the entity is on 

.setTilePos(entityId, x,y,z)

"Move the entity to a tile position in the world by passing co-ordinates ([x,y,z])"

mc.player.setTilePos(entityId,0,0,0) #set the position of the tile the entity is on 

.getRotation(entityId)

"Get the rotational angle (0 to 360) for an entity => [angle:float]"

angle = mc.entity.getRotation(entityId) #get the rotation of an entity print angle 

.getPitch(entityId)

"Get the pitch angle (-90 to 90) for an entity => [pitch:float]"

pitch = mc.entity.getPitch(entityId) #get the pitch for an entity print pitch 

.getDirection(entityId)

"Get unit vector of x,y,z for an entities direction => [Vec3]"

direction = mc.entity.getDirection(entityId) #get and entities direction print direction 

4. Minecraft.camera

.setNormal(entityId)

"Set camera mode to normal Minecraft view ([entityId])"
Available on Minecraft: Pi Edition

mc.camera.setNormal(entityId) #set camera mode to normal for a specific player 

.setFixed()

"Set camera mode to fixed view"
Available on Minecraft: Pi Edition

mc.camera.setFixed() #set camera mode to fixed  

.setFollow(entityId)

"Set camera mode to follow an entity ([entityId])"
Available on Minecraft: Pi Edition

mc.camera.setFollow(entityId) #set camera mode to follow for a specific player 

.setPos(x,y,z)

"Set camera entity position (x,y,z)"
Available on Minecraft: Pi Edition

mc.camera.setPos(0,0,0) #set camera position to a specific position of x, y, z 

5.Minecraft.events

.pollBlockHits()

"Block Hits (Only triggered by sword) => [BlockEvent]"

blockEvents = mc.events.pollBlockHits() #get block event hits that have occured since the last time the function was run for blockEvent in blockEvents: print blockEvent 

.pollChatPosts()

"Chat posts => [ChatEvent]"

chatEvents = mc.events.pollChatPosts() #get chat post events (messages) since the last time the function was run for chatEvent in chatEvents: print chatEvents 

.clearAll()

"Clear all old events"

mc.events.clearAll() #clear all events that have happened since the events where last got 

6.Block

"The definition of a Block in Minecraft, used to describe a block type and (if applicable) its data; also contains constants for the blocks type id's, e.g. BLOCK.AIR.id"

blockObj = block.Block(id) #create block of a specific type 
blockObj = block.Block(id, data) #create a block of a specific type and apply a data value 

如何导入包?
import minecraft
import block

.id
"The id (or type) of block"

AIR = Block(0)
STONE = Block(1)
GRASS = Block(2)
DIRT = Block(3)
COBBLESTONE = Block(4)
WOOD_PLANKS = Block(5)
SAPLING = Block(6)
BEDROCK = Block(7)
WATER_FLOWING = Block(8)
WATER = WATER_FLOWING
WATER_STATIONARY = Block(9)
LAVA_FLOWING = Block(10)
LAVA = LAVA_FLOWING
LAVA_STATIONARY = Block(11)
SAND = Block(12)
GRAVEL = Block(13)
GOLD_ORE = Block(14)
IRON_ORE = Block(15)
COAL_ORE = Block(16)
WOOD = Block(17)
LEAVES = Block(18)
GLASS = Block(20)
LAPIS_LAZULI_ORE = Block(21)
LAPIS_LAZULI_BLOCK = Block(22)
SANDSTONE = Block(24)
BED = Block(26)
COBWEB = Block(30)
GRASS_TALL = Block(31)
WOOL = Block(35)
FLOWER_YELLOW = Block(37)
FLOWER_CYAN = Block(38)
MUSHROOM_BROWN = Block(39)
MUSHROOM_RED = Block(40)
GOLD_BLOCK = Block(41)
IRON_BLOCK = Block(42)
STONE_SLAB_DOUBLE = Block(43)
STONE_SLAB = Block(44)
BRICK_BLOCK = Block(45)
TNT = Block(46)
BOOKSHELF = Block(47)
MOSS_STONE = Block(48)
OBSIDIAN = Block(49)
TORCH = Block(50)
FIRE = Block(51)
STAIRS_WOOD = Block(53)
CHEST = Block(54)
DIAMOND_ORE = Block(56)
DIAMOND_BLOCK = Block(57)
CRAFTING_TABLE = Block(58)
FARMLAND = Block(60)
FURNACE_INACTIVE = Block(61)
FURNACE_ACTIVE = Block(62)
DOOR_WOOD = Block(64)
LADDER = Block(65)
STAIRS_COBBLESTONE = Block(67)
DOOR_IRON = Block(71)
REDSTONE_ORE = Block(73)
SNOW = Block(78)
ICE = Block(79)
SNOW_BLOCK = Block(80)
CACTUS = Block(81)
CLAY = Block(82)
SUGAR_CANE = Block(83)
FENCE = Block(85)
GLOWSTONE_BLOCK = Block(89)
BEDROCK_INVISIBLE = Block(95)
STONE_BRICK = Block(98)
GLASS_PANE = Block(102)
MELON = Block(103)
FENCE_GATE = Block(107)
GLOWING_OBSIDIAN = Block(246)
NETHER_REACTOR_CORE = Block(247)

.data
"The data (or sub-type) of a block"

Data Values of blocks:
WOOL:
0: White
1: Orange
2: Magenta
3: Light Blue
4: Yellow
5: Lime
6: Pink
7: Grey
8: Light grey
9: Cyan
10: Purple
11: Blue
12: Brown
13: Green
14: Red
15:Black

WOOD:
0: Oak (up/down)
1: Spruce (up/down)
2: Birch (up/down)
(below not on Pi)
3: Jungle (up/down)
4: Oak (east/west)
5: Spruce (east/west)
6: Birch (east/west)
7: Jungle (east/west)
8: Oak (north/south)
9: Spruce (north/south)
10: Birch (north/south)
11: Jungle (north/south)
12: Oak (only bark)
13: Spruce (only bark)
14: Birch (only bark)
15: Jungle (only bark)

WOOD_PLANKS (Not on Pi):
0: Oak
1: Spruce
2: Birch
3: Jungle

SAPLING:
0: Oak
1: Spruce
2: Birch
3: Jungle (Not on Pi)

GRASS_TALL:
0: Shrub
1: Grass
2: Fern
3: Grass (color affected by biome) (Not on Pi)

TORCH:
1: Pointing east
2: Pointing west
3: Pointing south
4: Pointing north
5: Facing up

STONE_BRICK:
0: Stone brick
1: Mossy stone brick
2: Cracked stone brick
3: Chiseled stone brick

STONE_SLAB / STONE_SLAB_DOUBLE:
0: Stone
1: Sandstone
2: Wooden
3: Cobblestone
4: Brick
5: Stone Brick
Below - not on Pi
6: Nether Brick
7: Quartz

Not on Pi
SNOW_BLOCK:
0-7: Height of snow, 0 being the lowest, 7 being the highest.

TNT:
0: Inactive
1: Ready to explode

LEAVES:
1: Oak leaves
2: Spruce leaves
3: Birch leaves

SANDSTONE:
0: Sandstone
1: Chiseled sandstone
2: Smooth sandstone

STAIRS_[COBBLESTONE, WOOD]:
0: Ascending east
1: Ascending west
2: Ascending south
3: Ascending north
4: Ascending east (upside down)
5: Ascending west (upside down)
6: Ascending south (upside down)
7: Ascending north (upside down)

LADDERS, CHESTS, FURNACES, FENCE_GATE:
2: Facing north
3: Facing south
4: Facing west
5: Facing east

[WATER, LAVA]_STATIONARY:
0-7: Level of the water, 0 being the highest, 7 the lowest

NETHER_REACTOR_CORE:
0: Unused
1: Active
2: Stopped / used up

8. BlockEvent

"The definition of a BlockEvent in Minecraft, used to describe an event in Minecraft affecting blocks; returned by the Minecraft.events.pollBlockHits() method."

.type
"Type of block event; there is only 1 event currently implemented BlockEvent.HIT"

blockEvent = mc.events.pollBlockHits() 
blockEventType = blockEvent.type 

BlockEvent types:
0: BlockEvent.HIT

.pos
"The position of the block where the event occured, i.e. the block which was hit. .pos returns a Vec3 object of x,y,z co-ordinates"

blockEventPos = BlockEvent.pos

.face
"The face of the block where the event occured"

blockEventFace = BlockEvent.face

.entityId
"entityId of the player who caused the block event, i.e. the player who hit the block"

blockEventPlayer - BlockEvent.entityId

9. ChatEvent

"The definition of a ChatEvent in Minecraft, used to describe an event when a message is posted to the chat bar in Minecraft, returned by Minecraft.events.pollBlockHits() method."

chatEvent = mc.events.pollChatPosts() 

.type
"Type of block event; there is only 1 event currently implemented ChatEvent.POST"

chatEventType = chatEvent.type

ChatEvent types:
0: ChatEvent.POST

.message
"The message which was posted to the chat window."

chatEventMessage = ChatEvent.message

.entityId
"entityId of the player who posted the message to the chat."

blockEventPlayer - BlockEvent.entityId
Vec3
"The definition of a 3 part vector in Minecraft, i.e. a set of x, y, z co-ordinates; x and z are the horizontal positions, y the vertical"

position = vec3.Vec(0,0,0) 

.x
"x position"

xPos = position.x
.y
"y position"

yPos = position.y
.z
"z position"

zPos = position.z


- 本文内容来自网络,如有侵权,请联系本站处理。

2022-07   阅读(92)   评论(0)
 标签: maker Minecraft

涨知识
编码器

编码器是一种用来测量机械旋转或位移的传感器。它能够测量机械部件在旋转或直线运动时的位移位置或速度等信息,并将其转换成一系列电信号。

评论:
相关文章
将Arduino和Raspberry Pi硬件设备与Minecraft游戏连接

Minecraft Link使您能够通过 MCreator 程序、命令和 Minecraft mod 开发人员的通用 API 将 Arduino 和Raspberry Pi 等硬件设备与 Minecraft 游戏连接起来。


人类被AI“毁灭”,一定是从教它玩《我的世界》开始的

上周,几乎是前后脚,英伟达和国内几家科研机构分别发布了两份内容相似的论文。


高二学生爆肝10个月!自学数电在《我的世界》里打造理论最快计算器

一高二学生因爆肝在B站火了。他从未接触过数电,一切从零开始,仅仅是为了搞清计算器的原理,然后就直接在《我的世界》里肝出了个“理论最快”四则计算器。


我的世界数电七大逻辑门

数字电路是MC中十分重要的红石电路,其中最为关键的就是逻辑门。


各种Minecraft服务端介绍和下载

我的世界服务端大全,本文收集了一些MC的服务端。


在计算机里制造计算机:走进红石电脑RSC-3230

想象一下如果世界没有电,那将是多么令人绝望的景象。夜晚不再有光;空调和WIFI也变成了奢望;你目前正在阅读的这篇文章,将不可能呈现在你面前;当然,你热爱的游戏《我的世界》,也不可能存在了。


小学生都会的数字电路 造手机制作电脑都不在话下

想成为《我的世界》中众人膜拜的高阶玩家吗?红石系统是可以让你怒刷存在感的不二法器。


《Minecraft创客制作:用乐高、3D打印、Arduino等创建Minecraft真实世界》

本书是教你如何将Minecraft元素引入真实世界。用乐高积本或者3D打印材料,进行Minecraft趣味实物制作,并且进一步运用Arduino、编程以及机器人技术,使制作项目发光、运动。


Minecraft我的世界【红石】

Minecraft相关的红石介绍,内容知识偏向硬核,可能有点晦涩难懂。


在《我的世界》里从零打造一台计算机有多难?复旦本科生大神花费了一年心血

单枪匹马造出一个CPU乃至完整的电脑需要多长时间?有位大牛在《我的世界》游戏里用实际行动回答了这个问题:可能要花费一年多。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。