minecraft 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.md +14 -0
- data/README.md +1 -1
- data/lib/minecraft/commands.rb +48 -3
- data/lib/minecraft/data.rb +34 -1
- data/lib/minecraft/extensions.rb +31 -1
- data/lib/minecraft/version.rb +1 -1
- data/test/commands_test.rb +62 -0
- data/test/helper.rb +2 -1
- metadata +2 -2
data/CHANGES.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
0.3.2 (2011-08-31)
|
2
|
+
------------------
|
3
|
+
|
4
|
+
* Added dye kits with give support..
|
5
|
+
* Added a tool kit.
|
6
|
+
* Implemented command history.
|
7
|
+
|
8
|
+
0.3.1 (2011-08-30)
|
9
|
+
------------------
|
10
|
+
|
11
|
+
* Misc bug fixes.
|
12
|
+
* Revised README.
|
13
|
+
* Removed two time quotes.
|
14
|
+
|
1
15
|
0.3.0 (2011-08-29)
|
2
16
|
------------------
|
3
17
|
|
data/README.md
CHANGED
@@ -125,7 +125,7 @@ Read [https://github.com/basicxman/minecraft/wiki/Writing-tests](here) for how
|
|
125
125
|
we develop code with test driven development.
|
126
126
|
|
127
127
|
For any non-straightforward functionality (especially command naming and
|
128
|
-
syntax) you are encouraged to open up an
|
128
|
+
syntax) you are encouraged to open up an
|
129
129
|
[http://github.com/basicxman/minecraft/issues](issue) for discussion, issues
|
130
130
|
will be read and commented on promptly. Remember to report any bugs as well,
|
131
131
|
a bug can be something as simple as a command not returning feedback to the
|
data/lib/minecraft/commands.rb
CHANGED
@@ -365,7 +365,13 @@ module Minecraft
|
|
365
365
|
# @note all: is putting out.
|
366
366
|
def give(user, *args)
|
367
367
|
item, quantity = items_arg(1, args)
|
368
|
-
|
368
|
+
# For coloured wools/dyes.
|
369
|
+
if WOOL_COLOURS.include? item
|
370
|
+
(quantity / 64.0).ceil.times { kit(user, item) }
|
371
|
+
item = 35
|
372
|
+
else
|
373
|
+
item = resolve_item(item)
|
374
|
+
end
|
369
375
|
|
370
376
|
construct_give(user, item, quantity)
|
371
377
|
end
|
@@ -645,7 +651,7 @@ module Minecraft
|
|
645
651
|
# kitlist()
|
646
652
|
# @note ops: none
|
647
653
|
def kitlist()
|
648
|
-
|
654
|
+
say("Kits: #{KITS.keys.join(", ")}")
|
649
655
|
end
|
650
656
|
|
651
657
|
# Adds or prints the current todo list items.
|
@@ -659,7 +665,7 @@ module Minecraft
|
|
659
665
|
def todo(user, *args)
|
660
666
|
if args.length == 0
|
661
667
|
@todo_items.each_with_index do |item, index|
|
662
|
-
|
668
|
+
say("say #{index + 1}. #{item}")
|
663
669
|
end
|
664
670
|
return
|
665
671
|
end
|
@@ -689,6 +695,45 @@ module Minecraft
|
|
689
695
|
@server.puts "say Hurray!"
|
690
696
|
end
|
691
697
|
|
698
|
+
# Executes a command from a users history.
|
699
|
+
#
|
700
|
+
# @param [String] user The requesting user.
|
701
|
+
# @param [Integer] history The number of commands to look back.
|
702
|
+
# @example
|
703
|
+
# last("basicxman")
|
704
|
+
# last("basicxman", "2")
|
705
|
+
# @note ops: none
|
706
|
+
def last(user, history = 1)
|
707
|
+
user, history = user.downcase, history.to_i
|
708
|
+
if not @command_history.has_key? user or @command_history[user].length < history
|
709
|
+
return say("No command found.")
|
710
|
+
end
|
711
|
+
|
712
|
+
command = @command_history[user][-history]
|
713
|
+
t = @command_history[user].length
|
714
|
+
call_command(user, command.first, *command[1..-1])
|
715
|
+
|
716
|
+
# process_history_addition() will not add the same command twice in a
|
717
|
+
# row, so only slice if the command history length has changed.
|
718
|
+
@command_history[user].slice! -1 unless @command_history[user].length == t
|
719
|
+
end
|
720
|
+
|
721
|
+
# Prints the last three commands executed.
|
722
|
+
#
|
723
|
+
# @param [String] user The requesting user.
|
724
|
+
# @example
|
725
|
+
# history("basicxman")
|
726
|
+
# @note ops: none
|
727
|
+
def history(user)
|
728
|
+
user = user.downcase
|
729
|
+
return say("No command history found.") if not @command_history.has_key? user or @command_history[user].length == 0
|
730
|
+
|
731
|
+
i = [@command_history[user].length, 3].min * -1
|
732
|
+
@command_history[user][i, 3].reverse.each_with_index do |command, index|
|
733
|
+
say("#{index + 1}. #{command.join(" ")}")
|
734
|
+
end
|
735
|
+
end
|
736
|
+
|
692
737
|
private
|
693
738
|
|
694
739
|
# Prints the command signature options for a specified command.
|
data/lib/minecraft/data.rb
CHANGED
@@ -6,6 +6,7 @@ module Minecraft
|
|
6
6
|
:diamond => [276, 277, 278, 279, 293],
|
7
7
|
:goldarmour => [314, 315, 316, 317],
|
8
8
|
:armour => [310, 311, 312, 313],
|
9
|
+
:tools => [277, 278],
|
9
10
|
:ranged => [261, [262, 320]],
|
10
11
|
:nether => [261, [262, 320], [89, 128], 278, 276],
|
11
12
|
:portal => [[49, 14], 259],
|
@@ -15,9 +16,41 @@ module Minecraft
|
|
15
16
|
:blacksmith => [61, [263, 16], [264, 3], [265, 32], [266, 16]],
|
16
17
|
:miner => [278, [50, 64], 277, [65, 64]],
|
17
18
|
:farmer => [293, [295, 128], 277],
|
18
|
-
:chef => [[297, 3], [296, 192], [320, 3], 357, [353, 64], 354, [350, 2]]
|
19
|
+
:chef => [[297, 3], [296, 192], [320, 3], 357, [353, 64], 354, [350, 2]],
|
20
|
+
:lightgray => [[351, 64], [352, 64]],
|
21
|
+
:gray => [[351, 64], [352, 64]],
|
22
|
+
:black => [[351, 64]],
|
23
|
+
:red => [[38, 64]],
|
24
|
+
:orange => [[38, 64], [37, 64]],
|
25
|
+
:yellow => [[37, 64]],
|
26
|
+
:lime => [[352, 64], [81, 64]],
|
27
|
+
:green => [[81, 64]],
|
28
|
+
:lightblue => [[352, 64], [22, 64]],
|
29
|
+
:cyan => [[22, 64], [81, 64]],
|
30
|
+
:blue => [[22, 64]],
|
31
|
+
:purple => [[22, 64], [38, 64]],
|
32
|
+
:magenta => [[22, 64], [38, 64], [38, 64], [352, 64]],
|
33
|
+
:pink => [[352, 64], [38, 64]]
|
19
34
|
}
|
20
35
|
|
36
|
+
# Possible wool colours.
|
37
|
+
WOOL_COLOURS = %w(
|
38
|
+
lightgray
|
39
|
+
gray
|
40
|
+
black
|
41
|
+
red
|
42
|
+
orange
|
43
|
+
yellow
|
44
|
+
lime
|
45
|
+
green
|
46
|
+
lightblue
|
47
|
+
cyan
|
48
|
+
blue
|
49
|
+
purple
|
50
|
+
magenta
|
51
|
+
pink
|
52
|
+
)
|
53
|
+
|
21
54
|
# Values for time, 0 to 24000. 0 is dawn, 12000 is dusk.
|
22
55
|
TIME = {
|
23
56
|
:morning => 1000,
|
data/lib/minecraft/extensions.rb
CHANGED
@@ -21,6 +21,7 @@ module Minecraft
|
|
21
21
|
get_json :userdnd, []
|
22
22
|
get_json :memos
|
23
23
|
get_json :todo_items, []
|
24
|
+
get_json :command_history
|
24
25
|
@users = []
|
25
26
|
@counter = 0
|
26
27
|
@logon_time = {}
|
@@ -110,6 +111,7 @@ module Minecraft
|
|
110
111
|
save_file :userdnd
|
111
112
|
save_file :memos
|
112
113
|
save_file :todo_items
|
114
|
+
save_file :command_history
|
113
115
|
end
|
114
116
|
|
115
117
|
# Save an instance hash to it's associated data file.
|
@@ -121,6 +123,26 @@ module Minecraft
|
|
121
123
|
File.open("#{var}.json", "w") { |f| f.print instance_variable_get("@#{var}").to_json }
|
122
124
|
end
|
123
125
|
|
126
|
+
# Process command history addition.
|
127
|
+
#
|
128
|
+
# @param [String] user The user executing the command.
|
129
|
+
# @param [String] command The command to potetentially add to history.
|
130
|
+
# @param [Array] args Command arguments.
|
131
|
+
# @example
|
132
|
+
# process_history_addition("basicxman", "give", "cobblestone")
|
133
|
+
# process_history_addition("basicxman", "history")
|
134
|
+
def process_history_addition(user, command, args)
|
135
|
+
blacklist = %w( last history s )
|
136
|
+
return if blacklist.include? command.to_s
|
137
|
+
|
138
|
+
history = [command] + args
|
139
|
+
u = user.downcase
|
140
|
+
|
141
|
+
@command_history[u] ||= []
|
142
|
+
return if @command_history[u].last == history
|
143
|
+
@command_history[u] << history
|
144
|
+
end
|
145
|
+
|
124
146
|
# Complicated method to decide the logic of calling a command. Checks
|
125
147
|
# if the command requires op privileges and whether an `all` version is
|
126
148
|
# available and has been requested.
|
@@ -138,6 +160,7 @@ module Minecraft
|
|
138
160
|
# @example
|
139
161
|
# call_command("basicxman", "give", "cobblestone", "64")
|
140
162
|
def call_command(user, command, *args)
|
163
|
+
process_history_addition(user, command, args)
|
141
164
|
is_all = command.to_s.end_with? "all"
|
142
165
|
root = command.to_s.chomp("all").to_sym
|
143
166
|
return send(root, user, *args) unless @commands.include? root
|
@@ -297,13 +320,20 @@ module Minecraft
|
|
297
320
|
return if meta_check(line)
|
298
321
|
|
299
322
|
# :foo should use the shortcut 'foo'.
|
300
|
-
line.gsub!(/^(\<.*?\>\s+)
|
323
|
+
line.gsub!(/^(\<.*?\>\s+),/) { |m| "#{$1}!s " }
|
301
324
|
|
302
325
|
match_data = line.match /^\<(.*?)\>\s+!(.*?)$/
|
303
326
|
return if match_data.nil?
|
304
327
|
|
305
328
|
user = match_data[1]
|
306
329
|
args = match_data[2].split(" ")
|
330
|
+
|
331
|
+
if args.length == 0
|
332
|
+
return call_command(user, :last)
|
333
|
+
elsif args.first == "!" * args.first.length
|
334
|
+
return call_command(user, :last, args.first.length + 1)
|
335
|
+
end
|
336
|
+
|
307
337
|
call_command(user, args.slice!(0).to_sym, *args)
|
308
338
|
end
|
309
339
|
|
data/lib/minecraft/version.rb
CHANGED
data/test/commands_test.rb
CHANGED
@@ -81,6 +81,15 @@ eof
|
|
81
81
|
assert_equal result, @server.string
|
82
82
|
end
|
83
83
|
|
84
|
+
sandbox_test "give command should give kits for wools" do
|
85
|
+
@ext = Minecraft::Extensions.new(StringIO.new, {})
|
86
|
+
@ext.hops = ["basicxman"]
|
87
|
+
@ext.call_command("basicxman", "give", "lightgray", "2m")
|
88
|
+
t = @ext.server.string.gsub("\n", " ")
|
89
|
+
assert_match "give basicxman 35 64", t
|
90
|
+
assert_match "give basicxman 351", t
|
91
|
+
end
|
92
|
+
|
84
93
|
# User points system testing.
|
85
94
|
sandbox_test "should give a user points" do
|
86
95
|
@ext = Minecraft::Extensions.new(StringIO.new, {})
|
@@ -420,6 +429,59 @@ eof
|
|
420
429
|
assert_match "not exist", @ext.server.string
|
421
430
|
end
|
422
431
|
|
432
|
+
# Command history.
|
433
|
+
sandbox_test "should keep track of command history and allow users to use previous commands" do
|
434
|
+
@ext = Minecraft::Extensions.new(StringIO.new, {})
|
435
|
+
@ext.ops = ["basicxman"]
|
436
|
+
@ext.command_history = {}
|
437
|
+
@ext.call_command("basicxman", "dusk")
|
438
|
+
@ext.call_command("basicxman", "dawn")
|
439
|
+
@ext.server.string = ""
|
440
|
+
@ext.call_command("basicxman", "last")
|
441
|
+
@ext.call_command("basicxman", "last", "2")
|
442
|
+
@ext.info_command("2011-08-30 15:52:55 [INFO] <basicxman> !")
|
443
|
+
@ext.info_command("2011-08-30 15:52:55 [INFO] <basicxman> !!")
|
444
|
+
t = @ext.server.string.split("\n")
|
445
|
+
assert_match "time set 0", t[0]
|
446
|
+
assert_match "time set 12000", t[1]
|
447
|
+
assert_match "time set 0", t[2]
|
448
|
+
assert_match "time set 12000", t[3]
|
449
|
+
|
450
|
+
@ext.server.string = ""
|
451
|
+
@ext.call_command("basicxman", "last", "3")
|
452
|
+
assert_match "No command found", @ext.server.string
|
453
|
+
end
|
454
|
+
|
455
|
+
sandbox_test "should print users command history" do
|
456
|
+
@ext = Minecraft::Extensions.new(StringIO.new, {})
|
457
|
+
@ext.ops = ["basicxman"]
|
458
|
+
@ext.call_command("basicxman", "dawn")
|
459
|
+
@ext.call_command("basicxman", "dusk")
|
460
|
+
@ext.call_command("basicxman", "help", "list")
|
461
|
+
@ext.call_command("basicxman", "give", "4", "64")
|
462
|
+
@ext.server.string = ""
|
463
|
+
@ext.call_command("basicxman", "history")
|
464
|
+
t = @ext.server.string.split("\n")
|
465
|
+
assert_match "1. give 4 64", t[0]
|
466
|
+
assert_match "2. help list", t[1]
|
467
|
+
assert_match "3. dusk", t[2]
|
468
|
+
end
|
469
|
+
|
470
|
+
sandbox_test "should not add the same command to history twice in a row" do
|
471
|
+
@ext = Minecraft::Extensions.new(StringIO.new, {})
|
472
|
+
@ext.ops = ["basicxman"]
|
473
|
+
@ext.call_command("basicxman", "day")
|
474
|
+
@ext.call_command("basicxman", "day")
|
475
|
+
assert_equal [["day"]], @ext.command_history["basicxman"]
|
476
|
+
end
|
477
|
+
|
478
|
+
sandbox_test "should not add command history from shortucts" do
|
479
|
+
@ext = Minecraft::Extensions.new(StringIO.new, {})
|
480
|
+
@ext.call_command("basicxman", "s", "foo", "day")
|
481
|
+
@ext.call_command("basicxman", "s", "foo")
|
482
|
+
assert_nil @ext.command_history["basicxman"]
|
483
|
+
end
|
484
|
+
|
423
485
|
# Remaining commands testing (should test to ensure no errors are thrown in
|
424
486
|
# the command execution).
|
425
487
|
sandbox_test "should run commands without failure" do
|
data/test/helper.rb
CHANGED
@@ -10,7 +10,7 @@ require "turn"
|
|
10
10
|
|
11
11
|
module Minecraft
|
12
12
|
class Extensions
|
13
|
-
attr_accessor :commands, :users, :ops, :hops, :counter, :server, :kickvotes, :last_kick_vote, :uptime, :timers, :shortcuts, :userlog, :userpoints, :vote_threshold, :userdnd, :welcome_message, :memos, :todo_items
|
13
|
+
attr_accessor :commands, :users, :ops, :hops, :counter, :server, :kickvotes, :last_kick_vote, :uptime, :timers, :shortcuts, :userlog, :userpoints, :vote_threshold, :userdnd, :welcome_message, :memos, :todo_items, :command_history
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -28,6 +28,7 @@ class Test < MiniTest::Unit::TestCase
|
|
28
28
|
FileUtils.cd("mc") do
|
29
29
|
FileUtils.touch("ops.txt")
|
30
30
|
FileUtils.touch("server.properties")
|
31
|
+
FileUtils.rm_f("command_history.json")
|
31
32
|
instance_eval(&block)
|
32
33
|
end
|
33
34
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: minecraft
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.3.
|
5
|
+
version: 0.3.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Andrew Horsman
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-08-
|
13
|
+
date: 2011-08-31 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|