minecraft 0.0.1

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/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ gem.sh
3
+ .bundle
4
+ Gemfile.lock
5
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in minecraft.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/minecraft ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "minecraft"
4
+
5
+ server = Minecraft::Server.new("java -Xmx1024M -Xms512M -jar minecraft_server.jar nogui")
6
+ server.sin.puts("save-on")
data/lib/minecraft.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "minecraft/data"
2
+ require "minecraft/extensions"
3
+ require "minecraft/server"
4
+
5
+ module Minecraft
6
+ end
@@ -0,0 +1,250 @@
1
+ module Minecraft
2
+ module Data
3
+ KITS = {
4
+ :diamond => [276, 277, 278, 279, 293],
5
+ :garmour => [314, 315, 316, 317],
6
+ :armour => [310, 311, 312, 313],
7
+ :ranged => [261, [262, 640]],
8
+ :nether => [261, [262, 320], [348, 128], 278, 276],
9
+ :portal => [[49, 10], 259]
10
+ }
11
+
12
+ DATA_VALUE_HASH = {
13
+ "glass" => "20",
14
+ "purple wool" => "35",
15
+ "obsidian" => "49",
16
+ "redstone ore" => "73",
17
+ "stone" => "1",
18
+ "lapis lazuli ore" => "21",
19
+ "blue wool" => "35",
20
+ "torch" => "50",
21
+ "glowing redstone ore" => "74",
22
+ "grass" => "2",
23
+ "lapis lazuli block" => "22",
24
+ "brown wool" => "35",
25
+ "fire" => "51",
26
+ "dirt" => "3",
27
+ "dispenser" => "23",
28
+ "dark green wool" => "35",
29
+ "monster spawner" => "52",
30
+ "cobblestone" => "4",
31
+ "sandstone" => "24",
32
+ "red wool" => "35",
33
+ "wooden stairs" => "53",
34
+ "stone button" => "77",
35
+ "wooden plank" => "5",
36
+ "note block" => "25",
37
+ "black wool" => "35",
38
+ "chest" => "54",
39
+ "snow" => "78",
40
+ "sapling" => "6",
41
+ "bed" => "355",
42
+ "yellow flower" => "37",
43
+ "redstone wire" => "55",
44
+ "ice" => "79",
45
+ "spruce sapling" => "6",
46
+ "powered rail" => "27",
47
+ "red rose" => "38",
48
+ "diamond ore" => "56",
49
+ "snow block" => "80",
50
+ "birch sapling" => "6",
51
+ "detector rail" => "28",
52
+ "brown mushroom" => "39",
53
+ "diamond block" => "57",
54
+ "cactus" => "81",
55
+ "bedrock" => "7",
56
+ "sticky piston" => "29",
57
+ "red mushroom" => "40",
58
+ "crafting table" => "58",
59
+ "clay block" => "82",
60
+ "water" => "8",
61
+ "cobweb" => "30",
62
+ "gold block" => "41",
63
+ "crops " => "59",
64
+ "sugar cane" => "338",
65
+ "stationary water" => "9",
66
+ "tall grass" => "31",
67
+ "iron block" => "42",
68
+ "farmland " => "60",
69
+ "jukebox" => "84",
70
+ "lava" => "10",
71
+ "dead shrubs" => "32",
72
+ "double stone slab" => "43",
73
+ "furnace " => "61",
74
+ "fence" => "85",
75
+ "stationary lava " => "11",
76
+ "piston" => "33",
77
+ "double sandstone slab" => "43",
78
+ "burning furnace" => "62",
79
+ "pumpkin" => "86",
80
+ "sand" => "12",
81
+ "white wool" => "35",
82
+ "double wooden slab" => "43",
83
+ "sign post" => "63",
84
+ "netherrack" => "87",
85
+ "gravel" => "13",
86
+ "orange wool" => "35",
87
+ "double cobblestone slab" => "43",
88
+ "wooden door" => "324",
89
+ "soul sand" => "88",
90
+ "gold ore" => "14",
91
+ "magenta wool" => "35",
92
+ "stone slab" => "44",
93
+ "ladder" => "65",
94
+ "glowstone" => "89",
95
+ "glowstone block" => "89",
96
+ "iron ore" => "15",
97
+ "light blue wool" => "35",
98
+ "sandstone slab" => "44",
99
+ "rails" => "66",
100
+ "portal" => "90",
101
+ "coal ore" => "16",
102
+ "yellow wool" => "35",
103
+ "wooden slab" => "44",
104
+ "cobblestone stairs" => "67",
105
+ "jack-o-lantern" => "91",
106
+ "jack o lantern" => "91",
107
+ "oak wood" => "17",
108
+ "light green wool" => "35",
109
+ "cobblestone slab" => "44",
110
+ "wall sign" => "68",
111
+ "cake block" => "92",
112
+ "pine wood" => "17",
113
+ "pink wool" => "35",
114
+ "brick block" => "45",
115
+ "lever" => "69",
116
+ "birch wood" => "17",
117
+ "gray wool" => "35",
118
+ "tnt" => "46",
119
+ "stone pressure plate" => "70",
120
+ "leaves" => "18",
121
+ "light gray wool" => "35",
122
+ "bookshelf" => "47",
123
+ "iron door" => "330",
124
+ "locked chest" => "95",
125
+ "sponge" => "19",
126
+ "cyan wool" => "35",
127
+ "moss stone" => "48",
128
+ "wooden pressure plate" => "72",
129
+ "trapdoor" => "96",
130
+ "iron shovel" => "256",
131
+ "stick" => "280",
132
+ "chainmail boots" => "305",
133
+ "lapis lazuli" => "351",
134
+ "iron pickaxe" => "257",
135
+ "bowl" => "281",
136
+ "iron helmet" => "306",
137
+ "redstone" => "331",
138
+ "purple dye" => "351",
139
+ "iron axe" => "258",
140
+ "mushroom soup" => "282",
141
+ "iron chestplate" => "307",
142
+ "snowball" => "332",
143
+ "cyan dye" => "351",
144
+ "flint and steel" => "259",
145
+ "gold sword" => "283",
146
+ "iron leggings" => "308",
147
+ "boat" => "333",
148
+ "light gray dye" => "351",
149
+ "apple" => "260",
150
+ "gold shovel" => "284",
151
+ "iron boots" => "309",
152
+ "leather" => "334",
153
+ "gray dye" => "351",
154
+ "bow" => "261",
155
+ "gold pickaxe" => "285",
156
+ "diamond helmet" => "310",
157
+ "milk" => "335",
158
+ "pink dye" => "351",
159
+ "arrow" => "262",
160
+ "gold axe" => "286",
161
+ "diamond chestplate" => "311",
162
+ "clay brick" => "336",
163
+ "lime dye" => "351",
164
+ "coal" => "263",
165
+ "string" => "287",
166
+ "diamond leggings" => "312",
167
+ "clay balls" => "337",
168
+ "dandelion yellow" => "351",
169
+ "charcoal" => "263",
170
+ "feather" => "288",
171
+ "diamond boots" => "313",
172
+ "light blue dye" => "351",
173
+ "diamond" => "264",
174
+ "gunpowder" => "289",
175
+ "gold helmet" => "314",
176
+ "paper" => "339",
177
+ "magenta dye" => "351",
178
+ "iron ingot" => "265",
179
+ "wooden hoe" => "290",
180
+ "gold chestplate" => "315",
181
+ "book" => "340",
182
+ "orange dye" => "351",
183
+ "gold ingot" => "266",
184
+ "stone hoe" => "291",
185
+ "gold leggings" => "316",
186
+ "slimeball" => "341",
187
+ "bone meal" => "351",
188
+ "iron sword" => "267",
189
+ "iron hoe" => "292",
190
+ "gold boots" => "317",
191
+ "storage minecart" => "342",
192
+ "bone" => "352",
193
+ "wooden sword" => "268",
194
+ "diamond hoe" => "293",
195
+ "flint" => "318",
196
+ "powered minecart" => "343",
197
+ "sugar" => "353",
198
+ "wooden shovel" => "269",
199
+ "gold hoe" => "294",
200
+ "raw porkchop" => "319",
201
+ "egg" => "344",
202
+ "cake" => "354",
203
+ "wooden pickaxe" => "270",
204
+ "seeds" => "295",
205
+ "cooked porkchop" => "320",
206
+ "compass" => "345",
207
+ "wooden axe" => "271",
208
+ "wheat" => "296",
209
+ "paintings" => "321",
210
+ "fishing rod" => "346",
211
+ "redstone repeater" => "356",
212
+ "stone sword" => "272",
213
+ "bread" => "297",
214
+ "golden apple" => "322",
215
+ "clock" => "347",
216
+ "cookie" => "357",
217
+ "stone shovel" => "273",
218
+ "leather helmet" => "298",
219
+ "sign" => "323",
220
+ "glowstone dust" => "348",
221
+ "map" => "358",
222
+ "stone pickaxe" => "274",
223
+ "leather chestplate" => "299",
224
+ "raw fish" => "349",
225
+ "shears" => "359",
226
+ "stone axe" => "275",
227
+ "leather leggings" => "300",
228
+ "bucket" => "325",
229
+ "cooked fish" => "350",
230
+ "gold music disc" => "2256",
231
+ "diamond sword" => "276",
232
+ "leather boots" => "301",
233
+ "water bucket" => "326",
234
+ "ink sac" => "351",
235
+ "green music disc" => "2257",
236
+ "diamond shovel" => "277",
237
+ "chainmail helmet" => "302",
238
+ "lava bucket" => "327",
239
+ "rose red" => "351",
240
+ "diamond pickaxe" => "278",
241
+ "chainmail chestplate" => "303",
242
+ "minecart" => "328",
243
+ "cactus green" => "351",
244
+ "diamond axe" => "279",
245
+ "chainmail leggings" => "304",
246
+ "saddle" => "329",
247
+ "cocoa beans" => "351"
248
+ }
249
+ end
250
+ end
@@ -0,0 +1,72 @@
1
+ module Minecraft
2
+ class Extensions
3
+ include Data
4
+
5
+ def process(line)
6
+ puts line
7
+ return info_command(line) if line.index "INFO"
8
+ end
9
+
10
+ def info_command(line)
11
+ line.gsub! /^.*?\[INFO\]\s+/, ''
12
+ match_data = line.match /^\<(.*?)\>\s+!(.*?)$/
13
+ return if match_data.nil?
14
+
15
+ user = match_data[1]
16
+ args = match_data[2].split(" ")
17
+ return send(args.slice!(0), user, *args)
18
+ end
19
+
20
+ def method_missing(sym, *args)
21
+ if DATA_VALUE_HASH.has_key? sym.downcase
22
+ give(args.first, sym, args.last)
23
+ else
24
+ puts "Invalid command given."
25
+ end
26
+ end
27
+
28
+ def give(user, *args)
29
+ if args.length == 1
30
+ quantity = 1
31
+ item = args.first
32
+ else
33
+ quantity = args.last.to_i || 1
34
+ item = args[0..-2].join(" ")
35
+ end
36
+ item = (item.to_i.to_s == item) ? item.to_i : DATA_VALUE_HASH[item.downcase]
37
+
38
+ return quantify(user, item, quantity)
39
+ end
40
+
41
+ def kit(user, group)
42
+ ret = ""
43
+ KITS[group.to_sym].each do |item|
44
+ if item.is_a? Array
45
+ ret += quantify(user, item.first, item.last)
46
+ else
47
+ ret += "give #{user} #{item} 1\n"
48
+ end
49
+ end
50
+ return ret.chop
51
+ end
52
+
53
+ def tp(user, target)
54
+ "tp #{user} #{target}"
55
+ end
56
+
57
+ def nom(user)
58
+ "give #{user} 322 1"
59
+ end
60
+
61
+ def quantify(user, item, quantity)
62
+ return "give #{user} #{item} #{quantity}" if quantity <= 64
63
+
64
+ quantity = 2560 if quantity > 2560
65
+ full_quantity = (quantity / 64.0).floor
66
+ sub_quantity = quantity % 64
67
+ ret = "give #{user} #{item} 64\n" * full_quantity
68
+ ret += "give #{user} #{item} #{sub_quantity}"
69
+ return ret
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,22 @@
1
+ require "open3"
2
+
3
+ module Minecraft
4
+ class Server
5
+ attr_accessor :sin
6
+
7
+ def initialize(command)
8
+ @extensions = Extensions.new
9
+ @sin, @sout, @serr = Open3.popen3(command)
10
+ threads = []
11
+ threads << Thread.new { loop { process(@sout.gets) } }
12
+ threads << Thread.new { loop { process(@serr.gets) } }
13
+ threads << Thread.new { loop { @sin.puts gets } }
14
+ threads.each(&:join)
15
+ end
16
+
17
+ def process(line)
18
+ result = @extensions.process(line)
19
+ @sin.puts(result) unless result.nil?
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ module Minecraft
2
+ VERSION = "0.0.1"
3
+ end
data/minecraft.gemspec ADDED
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ require "minecraft/version"
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "minecraft"
8
+ s.version = Minecraft::VERSION
9
+ s.authors = ["Andrew Horsman"]
10
+ s.email = ["self@andrewhorsman.net"]
11
+ s.summary = "Minecraft server wrapper and deployment."
12
+ s.description = "A server console wrapper and other Minecraft deployment tools."
13
+
14
+ s.homepage = "http://github.com/basicxman/minecraft"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minecraft
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Andrew Horsman
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-08-13 00:00:00 -04:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: A server console wrapper and other Minecraft deployment tools.
18
+ email:
19
+ - self@andrewhorsman.net
20
+ executables:
21
+ - minecraft
22
+ extensions: []
23
+
24
+ extra_rdoc_files: []
25
+
26
+ files:
27
+ - .gitignore
28
+ - Gemfile
29
+ - Rakefile
30
+ - bin/minecraft
31
+ - lib/minecraft.rb
32
+ - lib/minecraft/data.rb
33
+ - lib/minecraft/extensions.rb
34
+ - lib/minecraft/server.rb
35
+ - lib/minecraft/version.rb
36
+ - minecraft.gemspec
37
+ has_rdoc: true
38
+ homepage: http://github.com/basicxman/minecraft
39
+ licenses: []
40
+
41
+ post_install_message:
42
+ rdoc_options: []
43
+
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ requirements: []
59
+
60
+ rubyforge_project:
61
+ rubygems_version: 1.5.0
62
+ signing_key:
63
+ specification_version: 3
64
+ summary: Minecraft server wrapper and deployment.
65
+ test_files: []
66
+