minecraft_api 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.md +15 -0
- data/README.md +23 -2
- data/lib/block.rb +94 -0
- data/lib/camera.rb +19 -0
- data/lib/color.rb +18 -0
- data/lib/minecraft_api.rb +12 -49
- data/lib/player.rb +14 -0
- data/lib/wool.rb +23 -0
- data/lib/world.rb +36 -0
- data/minecraft_api.gemspec +2 -2
- data/spec/block_spec.rb +10 -0
- data/spec/minecraft_api_spec.rb +59 -42
- data/spec/wool_spec.rb +21 -0
- data/spec/world_spec.rb +36 -0
- metadata +13 -5
- data/lib/block_type.rb +0 -91
- data/spec/block_type_spec.rb +0 -10
data/History.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
History
|
2
|
+
-------
|
3
|
+
|
4
|
+
0.1.0 (in progress)
|
5
|
+
-----
|
6
|
+
Bumped minor version because of backward-incompatible changes
|
7
|
+
|
8
|
+
*
|
9
|
+
* allow creation of wool with color
|
10
|
+
* renamed block_type to block
|
11
|
+
* factored out classes to seperate api components
|
12
|
+
|
13
|
+
0.0.1
|
14
|
+
-----
|
15
|
+
* Initial Release
|
data/README.md
CHANGED
@@ -1,4 +1,25 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
Minecraft API for the Raspberry Pi
|
2
|
+
----------------------------------
|
3
3
|
|
4
4
|
An API for the Raspberry Pi version of minecraft
|
5
|
+
|
6
|
+
Prerequisites:
|
7
|
+
|
8
|
+
* A [Raspberry Pi](http://www.raspberrypi.org)
|
9
|
+
* [Prerelease version of Minecraft](https://dl.dropbox.com/s/hqk8wsdzlyyujli/minecraft-pi-0.1.tar.gz)
|
10
|
+
|
11
|
+
To install:
|
12
|
+
|
13
|
+
gem install minecraft-api
|
14
|
+
|
15
|
+
and in your code:
|
16
|
+
|
17
|
+
require 'minecraft-api'
|
18
|
+
|
19
|
+
api = MinecraftApi.new(hostname, 4711) # <-- where ever your server is
|
20
|
+
api.world.block(5,10,15,Block::WOOD)
|
21
|
+
api.player.go(20,40,60)
|
22
|
+
|
23
|
+
etc...
|
24
|
+
|
25
|
+
|
data/lib/block.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
class Block
|
2
|
+
|
3
|
+
@@all_blocks = {}
|
4
|
+
|
5
|
+
attr_reader :id
|
6
|
+
|
7
|
+
def initialize(id)
|
8
|
+
@id = id
|
9
|
+
@@all_blocks[id] = self
|
10
|
+
end
|
11
|
+
|
12
|
+
AIR = Block.new(0)
|
13
|
+
STONE = Block.new(1)
|
14
|
+
GRASS = Block.new(2)
|
15
|
+
DIRT = Block.new(3)
|
16
|
+
COBBLESTONE = Block.new(4)
|
17
|
+
WOOD_PLANKS = Block.new(5)
|
18
|
+
SAPLING = Block.new(6)
|
19
|
+
BEDROCK = Block.new(7)
|
20
|
+
WATER_FLOWING = Block.new(8)
|
21
|
+
WATER_STATIONARY = Block.new(9)
|
22
|
+
LAVA_FLOWING = Block.new(10)
|
23
|
+
LAVA_STATIONARY = Block.new(11)
|
24
|
+
SAND = Block.new(12)
|
25
|
+
GRAVEL = Block.new(13)
|
26
|
+
GOLD_ORE = Block.new(14)
|
27
|
+
IRON_ORE = Block.new(15)
|
28
|
+
COAL_ORE = Block.new(16)
|
29
|
+
WOOD = Block.new(17)
|
30
|
+
LEAVES = Block.new(18)
|
31
|
+
GLASS = Block.new(20)
|
32
|
+
LAPIS_LAZULI_ORE = Block.new(21)
|
33
|
+
LAPIS_LAZULI_BLOCK = Block.new(22)
|
34
|
+
SANDSTONE = Block.new(24)
|
35
|
+
BED = Block.new(26)
|
36
|
+
COBWEB = Block.new(30)
|
37
|
+
GRASS_TALL = Block.new(31)
|
38
|
+
FLOWER_YELLOW = Block.new(37)
|
39
|
+
FLOWER_CYAN = Block.new(38)
|
40
|
+
MUSHROOM_BROWN = Block.new(39)
|
41
|
+
MUSHROOM_RED = Block.new(40)
|
42
|
+
GOLD_BLOCK = Block.new(41)
|
43
|
+
IRON_BLOCK = Block.new(42)
|
44
|
+
STONE_SLAB_DOUBLE = Block.new(43)
|
45
|
+
STONE_SLAB = Block.new(44)
|
46
|
+
BRICK_BLOCK = Block.new(45)
|
47
|
+
TNT = Block.new(46)
|
48
|
+
BOOKSHELF = Block.new(47)
|
49
|
+
MOSS_STONE = Block.new(48)
|
50
|
+
OBSIDIAN = Block.new(49)
|
51
|
+
TORCH = Block.new(50)
|
52
|
+
FIRE = Block.new(51)
|
53
|
+
STAIRS_WOOD = Block.new(53)
|
54
|
+
CHEST = Block.new(54)
|
55
|
+
DIAMOND_ORE = Block.new(56)
|
56
|
+
DIAMOND_BLOCK = Block.new(57)
|
57
|
+
CRAFTING_TABLE = Block.new(58)
|
58
|
+
FARMLAND = Block.new(60)
|
59
|
+
FURNACE_INACTIVE = Block.new(61)
|
60
|
+
FURNACE_ACTIVE = Block.new(62)
|
61
|
+
DOOR_WOOD = Block.new(64)
|
62
|
+
LADDER = Block.new(65)
|
63
|
+
STAIRS_COBBLESTONE = Block.new(67)
|
64
|
+
DOOR_IRON = Block.new(71)
|
65
|
+
REDSTONE_ORE = Block.new(73)
|
66
|
+
SNOW = Block.new(78)
|
67
|
+
ICE = Block.new(79)
|
68
|
+
SNOW_BLOCK = Block.new(80)
|
69
|
+
CACTUS = Block.new(81)
|
70
|
+
CLAY = Block.new(82)
|
71
|
+
SUGAR_CANE = Block.new(83)
|
72
|
+
FENCE = Block.new(85)
|
73
|
+
GLOWSTONE_BLOCK = Block.new(89)
|
74
|
+
BEDROCK_INVISIBLE = Block.new(95)
|
75
|
+
STONE_BRICK = Block.new(98)
|
76
|
+
GLASS_PANE = Block.new(102)
|
77
|
+
MELON = Block.new(103)
|
78
|
+
FENCE_GATE = Block.new(107)
|
79
|
+
GLOWING_OBSIDIAN = Block.new(246)
|
80
|
+
NETHER_REACTOR_CORE = Block.new(247)
|
81
|
+
|
82
|
+
def as_parameter_list
|
83
|
+
@id
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.find(id)
|
87
|
+
@@all_blocks[id]
|
88
|
+
end
|
89
|
+
|
90
|
+
def ==(another_block)
|
91
|
+
@id == another_block.id
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
data/lib/camera.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
class Camera
|
2
|
+
|
3
|
+
def initialize(api)
|
4
|
+
@api = api
|
5
|
+
end
|
6
|
+
|
7
|
+
def mode(mode,x=nil,y=nil,z=nil)
|
8
|
+
case mode
|
9
|
+
when :normal then command = "setNormal()"
|
10
|
+
when :third_person then command = "setThirdPerson()"
|
11
|
+
when :fixed then command = "setFixed()"
|
12
|
+
when :position then command = "setPos(#{x},#{y},#{z})"
|
13
|
+
else raise RuntimeError.new("valid camera settings are: :normal, :third_person, :fixed, and :position")
|
14
|
+
end
|
15
|
+
|
16
|
+
@api.send("camera.mode.#{command}")
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/lib/color.rb
ADDED
data/lib/minecraft_api.rb
CHANGED
@@ -1,17 +1,28 @@
|
|
1
1
|
require 'socket'
|
2
2
|
require 'io/wait'
|
3
3
|
|
4
|
+
require_relative 'world'
|
5
|
+
require_relative 'camera'
|
6
|
+
require_relative 'player'
|
7
|
+
|
4
8
|
class MinecraftApi
|
5
9
|
|
10
|
+
attr_reader :world
|
11
|
+
attr_reader :camera
|
12
|
+
attr_reader :player
|
13
|
+
|
6
14
|
def initialize(host = 'localhost', port = 4711)
|
7
15
|
@socket = TCPSocket.new host, port
|
16
|
+
@world = World.new(self)
|
17
|
+
@camera = Camera.new(self)
|
18
|
+
@player = Player.new(self)
|
8
19
|
end
|
9
20
|
|
10
21
|
# The other api's have a method like this
|
11
22
|
# I haven't seen it be invoked yet. Perhaps it is not needed
|
12
23
|
def drain()
|
13
24
|
while @socket.ready?
|
14
|
-
puts "
|
25
|
+
puts "DRAINING DATA FROM SOCKET [#{@socket.gets}]"
|
15
26
|
end
|
16
27
|
end
|
17
28
|
|
@@ -25,54 +36,6 @@ class MinecraftApi
|
|
25
36
|
@socket.gets.chomp
|
26
37
|
end
|
27
38
|
|
28
|
-
def get_block_type(x,y,z)
|
29
|
-
response = send_and_receive("world.getBlock(#{x},#{y},#{z})")
|
30
|
-
BlockType.find(response.to_i)
|
31
|
-
end
|
32
|
-
|
33
|
-
def set_block(x,y,z,block_type)
|
34
|
-
send("world.setBlock(#{x},#{y},#{z},#{block_type.id})")
|
35
|
-
end
|
36
|
-
|
37
|
-
def set_blocks(x1,y1,z1,x2,y2,z2,block_type)
|
38
|
-
send("world.setBlocks(#{x1},#{y1},#{z1},#{x2},#{y2},#{z2},#{block_type.id})")
|
39
|
-
end
|
40
|
-
|
41
|
-
def get_height(x,z)
|
42
|
-
send_and_receive("world.getHeight(#{x},#{z})").to_i
|
43
|
-
end
|
44
|
-
|
45
|
-
def checkpoint_save
|
46
|
-
send("word.checkpoint.save()")
|
47
|
-
end
|
48
|
-
|
49
|
-
def checkpoint_restore
|
50
|
-
send("word.checkpoint.restore()")
|
51
|
-
end
|
52
|
-
|
53
|
-
def chat_post(message)
|
54
|
-
send("chat.post(#{message})")
|
55
|
-
end
|
56
|
-
|
57
|
-
def camera_mode(mode,x=nil,y=nil,z=nil)
|
58
|
-
case mode
|
59
|
-
when :normal then send("camera.mode.setNormal()")
|
60
|
-
when :third_person then send("camera.mode.setThirdPerson()")
|
61
|
-
when :fixed then send("camera.mode.setFixed()")
|
62
|
-
when :position then send("camera.mode.setPos(#{x},#{y},#{z})")
|
63
|
-
else raise RuntimeError.new("valid camera settings are: :normal, :third_person, :fixed, and :position")
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def player_set_tile(x,y,z)
|
68
|
-
send("player.setTile(#{x},#{y},#{z})")
|
69
|
-
end
|
70
|
-
|
71
|
-
def player_get_tile
|
72
|
-
response = send_and_receive("player.getTile()")
|
73
|
-
response.split(',').map { |s| s.to_i }
|
74
|
-
end
|
75
|
-
|
76
39
|
def close
|
77
40
|
@socket.close
|
78
41
|
end
|
data/lib/player.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
class Player
|
2
|
+
def initialize(api)
|
3
|
+
@api = api
|
4
|
+
end
|
5
|
+
|
6
|
+
def go(x,y,z)
|
7
|
+
@api.send("player.setTile(#{x},#{y},#{z})")
|
8
|
+
end
|
9
|
+
|
10
|
+
def location
|
11
|
+
response = @api.send_and_receive("player.getTile()")
|
12
|
+
response.split(',').map { |s| s.to_i }
|
13
|
+
end
|
14
|
+
end
|
data/lib/wool.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative 'block'
|
2
|
+
require_relative 'color'
|
3
|
+
|
4
|
+
class Wool < Block
|
5
|
+
WOOL_BLOCK_ID = 35
|
6
|
+
private_constant :WOOL_BLOCK_ID
|
7
|
+
|
8
|
+
attr_reader :color
|
9
|
+
|
10
|
+
def initialize(color)
|
11
|
+
super(WOOL_BLOCK_ID)
|
12
|
+
@color = color
|
13
|
+
end
|
14
|
+
|
15
|
+
def as_parameter_list
|
16
|
+
"#{@id},#{@color}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def ==(another_wool)
|
20
|
+
@id == another_wool.id && @color == another_wool.color
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/lib/world.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative 'block'
|
2
|
+
|
3
|
+
class World
|
4
|
+
def initialize(api)
|
5
|
+
@api = api
|
6
|
+
end
|
7
|
+
|
8
|
+
def block_at(x,y,z)
|
9
|
+
response = @api.send_and_receive("world.getBlock(#{x},#{y},#{z})")
|
10
|
+
Block.find(response.to_i)
|
11
|
+
end
|
12
|
+
|
13
|
+
def block(x,y,z,block)
|
14
|
+
@api.send("world.setBlock(#{x},#{y},#{z},#{block.as_parameter_list})")
|
15
|
+
end
|
16
|
+
|
17
|
+
def cube(x1,y1,z1,x2,y2,z2,block)
|
18
|
+
@api.send("world.setBlocks(#{x1},#{y1},#{z1},#{x2},#{y2},#{z2},#{block.as_parameter_list})")
|
19
|
+
end
|
20
|
+
|
21
|
+
def height(x,z)
|
22
|
+
@api.send_and_receive("world.getHeight(#{x},#{z})").to_i
|
23
|
+
end
|
24
|
+
|
25
|
+
def save
|
26
|
+
@api.send("world.checkpoint.save()")
|
27
|
+
end
|
28
|
+
|
29
|
+
def restore
|
30
|
+
@api.send("world.checkpoint.restore()")
|
31
|
+
end
|
32
|
+
|
33
|
+
def chat_post(message)
|
34
|
+
@api.send("chat.post(#{message})")
|
35
|
+
end
|
36
|
+
end
|
data/minecraft_api.gemspec
CHANGED
@@ -2,8 +2,8 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
2
2
|
Gem::Specification.new do |s|
|
3
3
|
s.name = 'minecraft_api'
|
4
4
|
s.description = 'An API for the Raspberry Pi version of Minecraft'
|
5
|
-
s.version = '0.0
|
6
|
-
s.date = '2013-
|
5
|
+
s.version = '0.1.0'
|
6
|
+
s.date = '2013-02-14'
|
7
7
|
s.summary = 'Minecraft API'
|
8
8
|
s.homepage = 'https://github.com/nhajratw/minecraft_api'
|
9
9
|
s.authors = ["Nayan Hajratwala"]
|
data/spec/block_spec.rb
ADDED
data/spec/minecraft_api_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'minecraft_api'
|
2
2
|
|
3
|
-
describe "Minecraft
|
3
|
+
describe "Minecraft API", :integration => true do
|
4
4
|
|
5
5
|
before(:each) do
|
6
6
|
@mcapi = MinecraftApi.new('10.0.1.129', 4711)
|
@@ -15,76 +15,93 @@ describe "Minecraft server" do
|
|
15
15
|
response.should eq('Fail')
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
@mcapi.set_block(0,0,0,BlockType::WOOD)
|
20
|
-
block_type = @mcapi.get_block_type(0,0,0)
|
21
|
-
block_type.should eq(BlockType::WOOD)
|
22
|
-
end
|
18
|
+
describe "The World" do
|
23
19
|
|
24
|
-
|
25
|
-
@mcapi.set_block(0,0,0,BlockType::SAND)
|
26
|
-
block_type = @mcapi.get_block_type(0,0,0)
|
27
|
-
block_type.should eq(BlockType::SAND)
|
28
|
-
end
|
20
|
+
let(:world) { @mcapi.world }
|
29
21
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
22
|
+
it "can have blocks placed in it" do
|
23
|
+
world.block(0,0,0,Block::WOOD)
|
24
|
+
block = world.block_at(0,0,0)
|
25
|
+
block.should eq(Block::WOOD)
|
26
|
+
end
|
36
27
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
28
|
+
it "can create a block of a different type" do
|
29
|
+
world.block(0,0,0,Block::SAND)
|
30
|
+
block = world.block_at(0,0,0)
|
31
|
+
block.should eq(Block::SAND)
|
32
|
+
end
|
41
33
|
|
42
|
-
|
43
|
-
|
44
|
-
|
34
|
+
it "can create a block colored wool" do
|
35
|
+
wool = Wool.new(Color::RED)
|
36
|
+
world.block(0,0,0,wool)
|
37
|
+
block = world.block_at(0,0,0)
|
38
|
+
block.should eq(wool)
|
39
|
+
end
|
45
40
|
|
46
|
-
|
47
|
-
|
48
|
-
|
41
|
+
it "can create cubes" do
|
42
|
+
world.cube(0,0,0,2,2,2,Block::SAND)
|
43
|
+
# need to figure out assertion here.
|
44
|
+
# The assertions on each vector come too fast and end up returning
|
45
|
+
# types of 0.
|
46
|
+
end
|
49
47
|
|
50
|
-
|
51
|
-
|
48
|
+
it "can get the height of the world" do
|
49
|
+
y = world.height(5,5)
|
50
|
+
y.should eq(7)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "can checkpoint save" do
|
54
|
+
world.save
|
55
|
+
end
|
56
|
+
|
57
|
+
it "can checkpoint restore" do
|
58
|
+
world.restore
|
59
|
+
end
|
60
|
+
|
61
|
+
it "can send chats" do
|
62
|
+
world.chat_post("hello")
|
63
|
+
end
|
52
64
|
end
|
53
65
|
|
54
|
-
describe "Camera
|
66
|
+
describe "Camera" do
|
67
|
+
let(:camera) { @mcapi.camera }
|
68
|
+
|
55
69
|
it "can be set to normal" do
|
56
|
-
|
70
|
+
camera.mode(:normal)
|
57
71
|
end
|
58
72
|
|
59
73
|
it "can be set to third person" do
|
60
|
-
|
74
|
+
camera.mode(:third_person)
|
61
75
|
end
|
62
76
|
|
63
77
|
it "can be set to fixed" do
|
64
|
-
|
78
|
+
camera.mode(:fixed)
|
65
79
|
end
|
66
80
|
|
67
81
|
it "can be set to a certain position" do
|
68
|
-
|
82
|
+
camera.mode(:position,10,20,30)
|
69
83
|
end
|
70
84
|
|
71
85
|
it "throws an error when an invalid mode is specified" do
|
72
86
|
expect {
|
73
|
-
|
87
|
+
camera.mode(:fake)
|
74
88
|
}.to raise_error(RuntimeError, "valid camera settings are: :normal, :third_person, :fixed, and :position")
|
75
89
|
end
|
76
90
|
end
|
77
91
|
|
78
|
-
describe "Player
|
79
|
-
|
80
|
-
|
81
|
-
|
92
|
+
describe "Player" do
|
93
|
+
|
94
|
+
let(:player) { @mcapi.player }
|
95
|
+
|
96
|
+
it "can go to a particular tile" do
|
97
|
+
player.go(20,40,60)
|
98
|
+
vector = player.location
|
82
99
|
vector.should eq([20,40,60])
|
83
100
|
end
|
84
101
|
|
85
|
-
it "can
|
86
|
-
|
87
|
-
vector =
|
102
|
+
it "can go to another tile" do
|
103
|
+
player.go(-5,10,15)
|
104
|
+
vector = player.location
|
88
105
|
vector.should eq([-5,10,15])
|
89
106
|
end
|
90
107
|
end
|
data/spec/wool_spec.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'wool'
|
2
|
+
|
3
|
+
describe 'Wool' do
|
4
|
+
it 'can be created with color' do
|
5
|
+
wool = Wool.new(Color::RED)
|
6
|
+
wool.color.should == Color::RED
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'wool instances should be equal' do
|
10
|
+
wool1 = Wool.new(Color::RED)
|
11
|
+
wool2 = Wool.new(Color::RED)
|
12
|
+
wool1.should == wool2
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'wool instances should be equal' do
|
16
|
+
wool1 = Wool.new(Color::RED)
|
17
|
+
wool2 = Wool.new(Color::BLACK)
|
18
|
+
wool1.should_not == wool2
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
data/spec/world_spec.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
describe 'the World' do
|
2
|
+
let(:api) { double() }
|
3
|
+
let(:world) { World.new(api) }
|
4
|
+
|
5
|
+
it 'sends the proper setBlock command for normal blocks' do
|
6
|
+
api.should_receive(:send).with("world.setBlock(10,20,30,20)")
|
7
|
+
world.block(10,20,30,Block::GLASS)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'sends the proper setBlock command for blocks with extra data' do
|
11
|
+
api.should_receive(:send).with("world.setBlock(5,6,7,35,14)")
|
12
|
+
world.block(5,6,7,Wool.new(Color::RED))
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'sends the proper setBlocks command for normal blocks' do
|
16
|
+
api.should_receive(:send).with("world.setBlocks(10,20,30,40,50,60,20)")
|
17
|
+
world.cube(10,20,30,40,50,60,Block::GLASS)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'sends the proper setBlocks command for blocks with extra data' do
|
21
|
+
api.should_receive(:send).with("world.setBlocks(5,6,7,9,9,9,35,14)")
|
22
|
+
world.cube(5,6,7,9,9,9,Wool.new(Color::RED))
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'translates data into blocks' do
|
26
|
+
api.stub(:send_and_receive).with("world.getBlock(5,6,7)") { "10" }
|
27
|
+
block = world.block_at(5,6,7)
|
28
|
+
block.should == Block::LAVA_FLOWING
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'translates data into blocks with extra data' do
|
32
|
+
api.stub(:send_and_receive).with("world.getBlock(5,6,7)") { "35,14" }
|
33
|
+
block = world.block_at(5,6,7)
|
34
|
+
block.should == Wool.new(Color::RED)
|
35
|
+
end
|
36
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minecraft_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-02-14 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: An API for the Raspberry Pi version of Minecraft
|
15
15
|
email:
|
@@ -19,12 +19,20 @@ extensions: []
|
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
21
|
- .gitignore
|
22
|
+
- History.md
|
22
23
|
- README.md
|
23
|
-
- lib/
|
24
|
+
- lib/block.rb
|
25
|
+
- lib/camera.rb
|
26
|
+
- lib/color.rb
|
24
27
|
- lib/minecraft_api.rb
|
28
|
+
- lib/player.rb
|
29
|
+
- lib/wool.rb
|
30
|
+
- lib/world.rb
|
25
31
|
- minecraft_api.gemspec
|
26
|
-
- spec/
|
32
|
+
- spec/block_spec.rb
|
27
33
|
- spec/minecraft_api_spec.rb
|
34
|
+
- spec/wool_spec.rb
|
35
|
+
- spec/world_spec.rb
|
28
36
|
homepage: https://github.com/nhajratw/minecraft_api
|
29
37
|
licenses: []
|
30
38
|
post_install_message:
|
@@ -45,7 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
45
53
|
version: '0'
|
46
54
|
requirements: []
|
47
55
|
rubyforge_project:
|
48
|
-
rubygems_version: 1.8.
|
56
|
+
rubygems_version: 1.8.25
|
49
57
|
signing_key:
|
50
58
|
specification_version: 3
|
51
59
|
summary: Minecraft API
|
data/lib/block_type.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
class BlockType
|
2
|
-
|
3
|
-
@@all_block_types = {}
|
4
|
-
|
5
|
-
attr_reader :id
|
6
|
-
|
7
|
-
def initialize(id)
|
8
|
-
@id = id
|
9
|
-
@@all_block_types[id] = self
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.find(id)
|
13
|
-
@@all_block_types[id]
|
14
|
-
end
|
15
|
-
|
16
|
-
AIR = BlockType.new(0)
|
17
|
-
STONE = BlockType.new(1)
|
18
|
-
GRASS = BlockType.new(2)
|
19
|
-
DIRT = BlockType.new(3)
|
20
|
-
COBBLESTONE = BlockType.new(4)
|
21
|
-
WOOD_PLANKS = BlockType.new(5)
|
22
|
-
SAPLING = BlockType.new(6)
|
23
|
-
BEDROCK = BlockType.new(7)
|
24
|
-
WATER_FLOWING = BlockType.new(8)
|
25
|
-
WATER_STATIONARY = BlockType.new(9)
|
26
|
-
LAVA_FLOWING = BlockType.new(10)
|
27
|
-
LAVA_STATIONARY = BlockType.new(11)
|
28
|
-
SAND = BlockType.new(12)
|
29
|
-
GRAVEL = BlockType.new(13)
|
30
|
-
GOLD_ORE = BlockType.new(14)
|
31
|
-
IRON_ORE = BlockType.new(15)
|
32
|
-
COAL_ORE = BlockType.new(16)
|
33
|
-
WOOD = BlockType.new(17)
|
34
|
-
LEAVES = BlockType.new(18)
|
35
|
-
GLASS = BlockType.new(20)
|
36
|
-
LAPIS_LAZULI_ORE = BlockType.new(21)
|
37
|
-
LAPIS_LAZULI_BLOCK = BlockType.new(22)
|
38
|
-
SANDSTONE = BlockType.new(24)
|
39
|
-
BED = BlockType.new(26)
|
40
|
-
COBWEB = BlockType.new(30)
|
41
|
-
GRASS_TALL = BlockType.new(31)
|
42
|
-
WOOL = BlockType.new(35)
|
43
|
-
FLOWER_YELLOW = BlockType.new(37)
|
44
|
-
FLOWER_CYAN = BlockType.new(38)
|
45
|
-
MUSHROOM_BROWN = BlockType.new(39)
|
46
|
-
MUSHROOM_RED = BlockType.new(40)
|
47
|
-
GOLD_BLOCK = BlockType.new(41)
|
48
|
-
IRON_BLOCK = BlockType.new(42)
|
49
|
-
STONE_SLAB_DOUBLE = BlockType.new(43)
|
50
|
-
STONE_SLAB = BlockType.new(44)
|
51
|
-
BRICK_BLOCK = BlockType.new(45)
|
52
|
-
TNT = BlockType.new(46)
|
53
|
-
BOOKSHELF = BlockType.new(47)
|
54
|
-
MOSS_STONE = BlockType.new(48)
|
55
|
-
OBSIDIAN = BlockType.new(49)
|
56
|
-
TORCH = BlockType.new(50)
|
57
|
-
FIRE = BlockType.new(51)
|
58
|
-
STAIRS_WOOD = BlockType.new(53)
|
59
|
-
CHEST = BlockType.new(54)
|
60
|
-
DIAMOND_ORE = BlockType.new(56)
|
61
|
-
DIAMOND_BLOCK = BlockType.new(57)
|
62
|
-
CRAFTING_TABLE = BlockType.new(58)
|
63
|
-
FARMLAND = BlockType.new(60)
|
64
|
-
FURNACE_INACTIVE = BlockType.new(61)
|
65
|
-
FURNACE_ACTIVE = BlockType.new(62)
|
66
|
-
DOOR_WOOD = BlockType.new(64)
|
67
|
-
LADDER = BlockType.new(65)
|
68
|
-
STAIRS_COBBLESTONE = BlockType.new(67)
|
69
|
-
DOOR_IRON = BlockType.new(71)
|
70
|
-
REDSTONE_ORE = BlockType.new(73)
|
71
|
-
SNOW = BlockType.new(78)
|
72
|
-
ICE = BlockType.new(79)
|
73
|
-
SNOW_BLOCK = BlockType.new(80)
|
74
|
-
CACTUS = BlockType.new(81)
|
75
|
-
CLAY = BlockType.new(82)
|
76
|
-
SUGAR_CANE = BlockType.new(83)
|
77
|
-
FENCE = BlockType.new(85)
|
78
|
-
GLOWSTONE_BLOCK = BlockType.new(89)
|
79
|
-
BEDROCK_INVISIBLE = BlockType.new(95)
|
80
|
-
STONE_BRICK = BlockType.new(98)
|
81
|
-
GLASS_PANE = BlockType.new(102)
|
82
|
-
MELON = BlockType.new(103)
|
83
|
-
FENCE_GATE = BlockType.new(107)
|
84
|
-
GLOWING_OBSIDIAN = BlockType.new(246)
|
85
|
-
NETHER_REACTOR_CORE = BlockType.new(247)
|
86
|
-
|
87
|
-
def ==(another_block_type)
|
88
|
-
@id == another_block_type.id
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|