minecraft 0.0.1 → 0.0.2
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/README.md +59 -0
- data/bin/minecraft +39 -2
- data/lib/minecraft.rb +1 -0
- data/lib/minecraft/data.rb +247 -247
- data/lib/minecraft/extensions.rb +151 -70
- data/lib/minecraft/server.rb +16 -16
- data/lib/minecraft/tools.rb +32 -0
- data/lib/minecraft/version.rb +1 -1
- data/minecraft.gemspec +3 -1
- metadata +15 -3
data/README.md
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
Overview
|
2
|
+
--------
|
3
|
+
|
4
|
+
This is a deployment and console wrapper for Minecraft which allows for more
|
5
|
+
convenient administration of a Minecraft server.
|
6
|
+
|
7
|
+
Installation
|
8
|
+
------------
|
9
|
+
|
10
|
+
gem install minecraft
|
11
|
+
|
12
|
+
This will install the Minecraft extension library and binary, the Minecraft
|
13
|
+
server jarfile will be downloaded from http://minecraft.net when the binary is
|
14
|
+
ran for the first time.
|
15
|
+
|
16
|
+
Usage
|
17
|
+
-----
|
18
|
+
|
19
|
+
mkdir ~/MinecraftServer
|
20
|
+
cd ~/MinecraftServer
|
21
|
+
minecraft
|
22
|
+
|
23
|
+
minecraft -h
|
24
|
+
|
25
|
+
Current Features
|
26
|
+
----------------
|
27
|
+
|
28
|
+
- !give <item> <quantity>
|
29
|
+
- Give the user an item with a quantity of up to 2560 (by default Minecraft
|
30
|
+
will cap at 64).
|
31
|
+
- Use the item ID or item name. http://minecraftwiki.net/wiki/Data_values
|
32
|
+
- !tp <target_user>
|
33
|
+
- !nom
|
34
|
+
- !kit
|
35
|
+
- Diamond
|
36
|
+
- Gold armour
|
37
|
+
- Armour
|
38
|
+
- Ranged
|
39
|
+
- Nether
|
40
|
+
- Portal
|
41
|
+
|
42
|
+
TODO
|
43
|
+
----
|
44
|
+
|
45
|
+
- Improved error handling.
|
46
|
+
- Log time users have spent on the server.
|
47
|
+
- !give timers (give user A an item every X seconds).
|
48
|
+
|
49
|
+
Contributors
|
50
|
+
------------
|
51
|
+
|
52
|
+
Forks are welcomed, pull requests will be prompty reviewed!
|
53
|
+
|
54
|
+
- Ian Horsman
|
55
|
+
|
56
|
+
Notice
|
57
|
+
------
|
58
|
+
|
59
|
+
Minecraft is copyright of Mojang AB and developed by Markus Persson (@notch).
|
data/bin/minecraft
CHANGED
@@ -1,6 +1,43 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require "slop"
|
4
|
+
require "net/http"
|
3
5
|
require "minecraft"
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
+
def minecraft_exit
|
8
|
+
if $opts.tempmobs?
|
9
|
+
puts "[+] Restoring previous mob state."
|
10
|
+
Minecraft::Tools.toggle_mobs
|
11
|
+
end
|
12
|
+
exit!
|
13
|
+
end
|
14
|
+
|
15
|
+
trap("SIGINT") { minecraft_exit }
|
16
|
+
|
17
|
+
$opts = Slop.parse :help => true do
|
18
|
+
banner "Usage: minecraft [options]"
|
19
|
+
|
20
|
+
on :n, :no_run, "Don't run the Minecraft server instance."
|
21
|
+
on :u, :update, "Download the latest version of the Minecraft server jarfile."
|
22
|
+
on :s, :min_memory, "Specify the minimum amount of memory to allocate.", :optional => true
|
23
|
+
on :x, :max_memory, "Specify the maximum amount of memory to allocate.", :optional => true
|
24
|
+
on :no_auto_save, "Disable auto save."
|
25
|
+
on :m, :tempmobs, "Temporarily toggles mobs."
|
26
|
+
end
|
27
|
+
|
28
|
+
if $opts.update?
|
29
|
+
Minecraft::Tools.download_minecraft
|
30
|
+
end
|
31
|
+
|
32
|
+
if $opts.tempmobs?
|
33
|
+
puts "[+] Temporarily toggling mobs."
|
34
|
+
Minecraft::Tools.toggle_mobs
|
35
|
+
end
|
36
|
+
|
37
|
+
unless $opts.no_run?
|
38
|
+
Minecraft::Tools.check_jarfile
|
39
|
+
command = Minecraft::Tools.command($opts)
|
40
|
+
puts "[+] #{command}"
|
41
|
+
server = Minecraft::Server.new(command)
|
42
|
+
server.sin.puts("save-on") unless $opts.no_auto_save?
|
43
|
+
end
|
data/lib/minecraft.rb
CHANGED
data/lib/minecraft/data.rb
CHANGED
@@ -1,250 +1,250 @@
|
|
1
1
|
module Minecraft
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
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
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
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
250
|
end
|
data/lib/minecraft/extensions.rb
CHANGED
@@ -1,72 +1,153 @@
|
|
1
1
|
module Minecraft
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
2
|
+
class Extensions
|
3
|
+
include Data
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@ops = File.readlines("ops.txt").map { |s| s.chop }
|
7
|
+
@users = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def process(line)
|
11
|
+
puts line
|
12
|
+
return info_command(line) if line.index "INFO"
|
13
|
+
end
|
14
|
+
|
15
|
+
def info_command(line)
|
16
|
+
line.gsub! /^.*?\[INFO\]\s+/, ''
|
17
|
+
meta_check(line)
|
18
|
+
match_data = line.match /^\<(.*?)\>\s+!(.*?)$/
|
19
|
+
return if match_data.nil?
|
20
|
+
|
21
|
+
user = match_data[1]
|
22
|
+
args = match_data[2].split(" ")
|
23
|
+
return send(args.slice!(0), user, *args)
|
24
|
+
end
|
25
|
+
|
26
|
+
def meta_check(line)
|
27
|
+
return if check_ops(line)
|
28
|
+
return if check_join_part(line)
|
29
|
+
end
|
30
|
+
|
31
|
+
def check_ops(line)
|
32
|
+
user = line.split(" ").last
|
33
|
+
if line.index "De-opping"
|
34
|
+
@ops.reject! { |u| u == user }
|
35
|
+
return true
|
36
|
+
elsif line.index "Opping"
|
37
|
+
@ops << user
|
38
|
+
return true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def check_join_part(line)
|
43
|
+
user = line.split(" ").first
|
44
|
+
if line.index "lost connection"
|
45
|
+
@users.reject! { |u| u == user }
|
46
|
+
return true
|
47
|
+
elsif line.index "logged in"
|
48
|
+
@users << user
|
49
|
+
return true
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def method_missing(sym, *args)
|
54
|
+
if DATA_VALUE_HASH.has_key? sym.downcase
|
55
|
+
give(args.first, sym, args.last)
|
56
|
+
else
|
57
|
+
puts "Invalid command given."
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def giveall(user, *args)
|
62
|
+
return privilege_error(user, "giveall") unless is_op? user
|
63
|
+
ret = "say #{user} is putting out!\n"
|
64
|
+
@users.each do |u|
|
65
|
+
ret += mc_give(u, *args)
|
66
|
+
end
|
67
|
+
|
68
|
+
return ret
|
69
|
+
end
|
70
|
+
|
71
|
+
def give(user, *args)
|
72
|
+
return privilege_error(user, "give") unless is_op? user
|
73
|
+
return mc_give(user, *args)
|
74
|
+
end
|
75
|
+
|
76
|
+
def mc_give(user, *args)
|
77
|
+
if args.length == 1
|
78
|
+
quantity = 1
|
79
|
+
item = args.first
|
80
|
+
else
|
81
|
+
quantity = args.last.to_i || 1
|
82
|
+
item = args[0..-2].join(" ")
|
83
|
+
end
|
84
|
+
item = (item.to_i.to_s == item) ? item.to_i : DATA_VALUE_HASH[item.downcase]
|
85
|
+
|
86
|
+
return quantify(user, item, quantity)
|
87
|
+
end
|
88
|
+
|
89
|
+
def kit(user, group)
|
90
|
+
return privilege_error(user, "kit") unless is_op? user
|
91
|
+
return "say #{group} is not a valid kit." unless KITS.has_key? group.to_sym
|
92
|
+
ret = ""
|
93
|
+
|
94
|
+
KITS[group.to_sym].each do |item|
|
95
|
+
if item.is_a? Array
|
96
|
+
ret += quantify(user, item.first, item.last)
|
97
|
+
else
|
98
|
+
ret += "give #{user} #{item} 1\n"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
return ret.chop
|
102
|
+
end
|
103
|
+
|
104
|
+
def tp(user, target)
|
105
|
+
"tp #{user} #{target}"
|
106
|
+
end
|
107
|
+
|
108
|
+
def tpall(user)
|
109
|
+
return privilege_error(user, "tpall", "Wow, #{user} actually tried to pull that...") unless is_op? user
|
110
|
+
ret = "say #{user} is teleporting all users to their location.\n"
|
111
|
+
@users.each do |u|
|
112
|
+
ret += tp(u, user)
|
113
|
+
end
|
114
|
+
return ret
|
115
|
+
end
|
116
|
+
|
117
|
+
def nom(user)
|
118
|
+
return privilege_error(user, "nom", "No noms for you!") unless is_op? user
|
119
|
+
"give #{user} 322 1"
|
120
|
+
end
|
121
|
+
|
122
|
+
def help(*args)
|
123
|
+
<<-eof
|
124
|
+
say !tp target_user
|
125
|
+
say !tpall
|
126
|
+
say !kit kit_name
|
127
|
+
say !give item quantity
|
128
|
+
say !giveall item quantity
|
129
|
+
say !nom
|
130
|
+
say /help
|
131
|
+
eof
|
132
|
+
end
|
133
|
+
|
134
|
+
def quantify(user, item, quantity)
|
135
|
+
return "give #{user} #{item} #{quantity}" if quantity <= 64
|
136
|
+
|
137
|
+
quantity = 2560 if quantity > 2560
|
138
|
+
full_quantity = (quantity / 64.0).floor
|
139
|
+
sub_quantity = quantity % 64
|
140
|
+
ret = "give #{user} #{item} 64\n" * full_quantity
|
141
|
+
ret += "give #{user} #{item} #{sub_quantity}"
|
142
|
+
return ret
|
143
|
+
end
|
144
|
+
|
145
|
+
def is_op?(user)
|
146
|
+
@ops.include? user
|
147
|
+
end
|
148
|
+
|
149
|
+
def privilege_error(user, command, suffix = "S/he must be humiliated!")
|
150
|
+
"say #{user} is not an op, cannot use !#{command}. #{suffix}"
|
151
|
+
end
|
152
|
+
end
|
72
153
|
end
|
data/lib/minecraft/server.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
require "open3"
|
2
2
|
|
3
3
|
module Minecraft
|
4
|
-
|
5
|
-
|
4
|
+
class Server
|
5
|
+
attr_accessor :sin
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
def process(line)
|
18
|
+
result = @extensions.process(line)
|
19
|
+
@sin.puts(result) unless result.nil?
|
20
|
+
end
|
21
|
+
end
|
22
22
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Minecraft
|
2
|
+
module Tools
|
3
|
+
def self.check_jarfile
|
4
|
+
download_minecraft unless File.exists? "minecraft_server.jar"
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.download_minecraft
|
8
|
+
url = get_minecraft_page
|
9
|
+
puts "[+] Downloading Minecraft server..."
|
10
|
+
`wget http://minecraft.net/#{url} -O minecraft_server.jar -q`
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.get_minecraft_page
|
14
|
+
page = Net::HTTP.get("www.minecraft.net", "/download.jsp")
|
15
|
+
data = page.match /\"([0-9a-zA-Z_\/]*minecraft_server\.jar\?v=[0-9]+)/
|
16
|
+
data[1]
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.command(opts)
|
20
|
+
"java -Xmx#{opts[:max_memory] || "1024M"} -Xms#{opts[:min_memory] || "1024M"} -jar minecraft_server.jar nogui"
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.toggle_mobs
|
24
|
+
content = File.read("server.properties")
|
25
|
+
state = content.match(/spawn\-monsters=(true|false)/)[1]
|
26
|
+
new_state = state == "true" ? "false" : "true"
|
27
|
+
content.gsub! "spawn-monsters=#{state}", "spawn-monsters=#{new_state}"
|
28
|
+
|
29
|
+
File.open("server.properties", "w") { |f| f.print content }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/minecraft/version.rb
CHANGED
data/minecraft.gemspec
CHANGED
@@ -11,9 +11,11 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.summary = "Minecraft server wrapper and deployment."
|
12
12
|
s.description = "A server console wrapper and other Minecraft deployment tools."
|
13
13
|
|
14
|
-
|
14
|
+
s.homepage = "http://github.com/basicxman/minecraft"
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_dependency 'slop'
|
19
21
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: minecraft
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Andrew Horsman
|
@@ -12,8 +12,18 @@ cert_chain: []
|
|
12
12
|
|
13
13
|
date: 2011-08-13 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
|
-
dependencies:
|
16
|
-
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: slop
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
17
27
|
description: A server console wrapper and other Minecraft deployment tools.
|
18
28
|
email:
|
19
29
|
- self@andrewhorsman.net
|
@@ -26,12 +36,14 @@ extra_rdoc_files: []
|
|
26
36
|
files:
|
27
37
|
- .gitignore
|
28
38
|
- Gemfile
|
39
|
+
- README.md
|
29
40
|
- Rakefile
|
30
41
|
- bin/minecraft
|
31
42
|
- lib/minecraft.rb
|
32
43
|
- lib/minecraft/data.rb
|
33
44
|
- lib/minecraft/extensions.rb
|
34
45
|
- lib/minecraft/server.rb
|
46
|
+
- lib/minecraft/tools.rb
|
35
47
|
- lib/minecraft/version.rb
|
36
48
|
- minecraft.gemspec
|
37
49
|
has_rdoc: true
|