minecraft 0.3.1 → 0.3.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/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
|