diamond-lang 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -3
- data/VERSION +1 -1
- data/diamond-lang.gemspec +5 -3
- data/examples/custom_crafting.rb +37 -0
- data/lib/diamond-lang.rb +0 -1
- data/lib/diamond-lang/helpers/command_block.rb +1 -1
- data/lib/diamond-lang/helpers/custom_crafting.rb +176 -0
- data/lib/diamond-lang/helpers/target_selector.rb +3 -3
- data/lib/diamond-lang/one_command.rb +25 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3075c30a0c08b540e5bfacab36b24805454376ff
|
4
|
+
data.tar.gz: df3af1c137c9ecb555391eeb2633caa64d588d05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d08ee782327aff9f96a183d80a04f4edb4ddcaa2400b3beddec5f43f11814d146936e6d849a7d8ae4064d35a230eeef3a73a9ddd59217ffc5ef1893137f2e21f
|
7
|
+
data.tar.gz: 7bb9541370b490cebfc9a6fba68ea2bb9310e2587db284d120f5c870c07ab0f4587f16ffee309130f309ef524f747501faecfb251047a6efd0fca1737c93e8e6
|
data/README.md
CHANGED
@@ -153,11 +153,10 @@ DiamondLang::Helpers::Coordinate(:x, 6) + 5 #=> 11
|
|
153
153
|
~~~
|
154
154
|
|
155
155
|
##Conditions:
|
156
|
-
*Coming soon!*
|
157
156
|
To make commands run on success, attach a block:
|
158
157
|
|
159
158
|
~~~rb
|
160
|
-
c.test_for s(a: {r: 10}) do |c|
|
159
|
+
c.test_for s(a: {r: 10}) do |c|
|
161
160
|
c.tell s(a: {r: 10}), 'hello'
|
162
161
|
end
|
163
162
|
#=> Command Block: test_for @a[r=10]
|
@@ -169,7 +168,7 @@ Diamond Lang is just a Ruby framework, so you can have awesome things, like vari
|
|
169
168
|
|
170
169
|
~~~rb
|
171
170
|
close_players = s(a: {r: 10})
|
172
|
-
c.test_for close_players do |c|
|
171
|
+
c.test_for close_players do |c|
|
173
172
|
c.tell close_players, 'hello'
|
174
173
|
end #=> @a[r=10]
|
175
174
|
~~~
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/diamond-lang.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: diamond-lang 1.
|
5
|
+
# stub: diamond-lang 1.2.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "diamond-lang"
|
9
|
-
s.version = "1.
|
9
|
+
s.version = "1.2.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Ben (@penne12_)"]
|
14
|
-
s.date = "
|
14
|
+
s.date = "2016-01-01"
|
15
15
|
s.description = "Making Minecraft 1 Command Creations with ruby. It's as easy as `c.say 123`"
|
16
16
|
s.email = "ben@bensites.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"VERSION",
|
29
29
|
"diamond-lang.gemspec",
|
30
30
|
"examples/conveyor.rb",
|
31
|
+
"examples/custom_crafting.rb",
|
31
32
|
"examples/hello_world.rb",
|
32
33
|
"lib/diamond-lang.rb",
|
33
34
|
"lib/diamond-lang/command_chain.rb",
|
@@ -38,6 +39,7 @@ Gem::Specification.new do |s|
|
|
38
39
|
"lib/diamond-lang/helpers/constants.rb",
|
39
40
|
"lib/diamond-lang/helpers/coordinate.rb",
|
40
41
|
"lib/diamond-lang/helpers/coordinates.rb",
|
42
|
+
"lib/diamond-lang/helpers/custom_crafting.rb",
|
41
43
|
"lib/diamond-lang/helpers/entity.rb",
|
42
44
|
"lib/diamond-lang/helpers/errors/invalid_axis.rb",
|
43
45
|
"lib/diamond-lang/helpers/errors/invalid_coordinate_value.rb",
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'diamond-lang'
|
2
|
+
|
3
|
+
class CustomCrafting < DiamondLang::OneCommand
|
4
|
+
def setup(c)
|
5
|
+
c.title s(:a), :subtitle, {"text " => "command by Ben from bensites.com"}.to_json
|
6
|
+
c.title s(:a), :title, {"text " => "Custom"}.to_json
|
7
|
+
add_crafting([
|
8
|
+
{
|
9
|
+
pattern: " s"+
|
10
|
+
" p "+
|
11
|
+
"p ",
|
12
|
+
result: " "+
|
13
|
+
" n "+
|
14
|
+
" ",
|
15
|
+
n: "id:\"minecraft:name_tag\",Count:1b",
|
16
|
+
s: "id:\"minecraft:string\",Count:1b",
|
17
|
+
p: "id:\"minecraft:paper\",Count:1b"
|
18
|
+
},
|
19
|
+
{
|
20
|
+
pattern: "bbb"+
|
21
|
+
"bpb"+
|
22
|
+
"bbb",
|
23
|
+
result: " "+
|
24
|
+
" s ",
|
25
|
+
b: "id:\"minecraft:iron_bars\",Count:1b",
|
26
|
+
p: "id:\"minecraft:porkchop\",Count:64b",
|
27
|
+
s: "id:\"minecraft:mob_spawner\",Count:1b"
|
28
|
+
}
|
29
|
+
])
|
30
|
+
end
|
31
|
+
|
32
|
+
def tick(c)
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
CustomCrafting.create
|
data/lib/diamond-lang.rb
CHANGED
@@ -0,0 +1,176 @@
|
|
1
|
+
module DiamondLang
|
2
|
+
module Helpers
|
3
|
+
# Please Note:
|
4
|
+
#
|
5
|
+
# This class uses the scoreboard objectives:
|
6
|
+
# - ask_table
|
7
|
+
# - craft_table
|
8
|
+
# - on_table
|
9
|
+
# - ct_has_block
|
10
|
+
# - craft_success
|
11
|
+
# And ArmorStands named
|
12
|
+
# - CraftingTable
|
13
|
+
# - CraftingCreator
|
14
|
+
#
|
15
|
+
# Including those in your command will break this, and other creations that use this.
|
16
|
+
#
|
17
|
+
# Do not change the scoreboard objectives ask_table, or on_table.
|
18
|
+
# Also, do not change the ArmorStand name "CraftingTable".
|
19
|
+
# If you do, you'll risk breaking other creations in the same world.
|
20
|
+
#
|
21
|
+
#
|
22
|
+
# It also creates about 21 commands + 5 for every recipe.
|
23
|
+
# On default settings, that's
|
24
|
+
# - 1 level
|
25
|
+
# - 1 row per recipe
|
26
|
+
# - 1 block
|
27
|
+
#
|
28
|
+
# 2 should be able to be in the same world without any conflict.
|
29
|
+
class CustomCrafting
|
30
|
+
def initialize(c, recipes)
|
31
|
+
@crafting_recipes = recipes
|
32
|
+
c.scoreboard :objectives, :add, :ask_table, :dummy, "Asked to Create A Table"
|
33
|
+
c.scoreboard :objectives, :add, :craft_table, :trigger, "Creating a Crafting Table"
|
34
|
+
c.scoreboard :objectives, :add, :on_table, :trigger, "Players on a crafting table"
|
35
|
+
c.scoreboard :objectives, :add, :ct_has_block, :dummy, "Crafting Table with block?"
|
36
|
+
c.scoreboard :objectives, :add, :craft_success, :dummy, "Crafting Success:"
|
37
|
+
end
|
38
|
+
def tick(c)
|
39
|
+
#Blocks
|
40
|
+
crafting_table = b('crafting_table')
|
41
|
+
stone = b('stone')
|
42
|
+
|
43
|
+
#Enable the on_table trigger
|
44
|
+
c.scoreboard :players, :enable, s(:a), :on_table
|
45
|
+
|
46
|
+
#Mark all players on a crafting table pattern
|
47
|
+
c.execute s(:a), relative, :detect, coords('~', '~-1', '~'), crafting_table,
|
48
|
+
:execute, sp, relative, :detect, coords('~-1', '~-1', '~'), crafting_table,
|
49
|
+
:execute, sp, relative, :detect, coords('~1', '~-1', '~'), crafting_table,
|
50
|
+
:execute, sp, relative, :detect, coords('~1', '~-1', '~1'), stone,
|
51
|
+
:execute, sp, relative, :detect, coords('~1', '~-1', '~-1'), stone,
|
52
|
+
:execute, sp, relative, :detect, coords('~-1', '~-1', '~-1'), stone,
|
53
|
+
:execute, sp, relative, :detect, coords('~-1', '~-1', '~-1'), stone,
|
54
|
+
:execute, sp, relative, :detect, coords('~', '~-1', '~1'), crafting_table,
|
55
|
+
:execute, sp, relative, :detect, coords('~', '~-1', '~-1'), crafting_table,
|
56
|
+
:trigger, :on_table, :set, 1
|
57
|
+
|
58
|
+
#Set all players who are not on a crafting table pattern to ask again once they are
|
59
|
+
c.scoreboard :players, :set, s(:a, {score_on_table: 0}), :ask_table, 0
|
60
|
+
|
61
|
+
#Get all players who have not been asked yet and are on a crafting table pattern if they want to build a crafting table
|
62
|
+
ask_players = s(:a, {score_on_table_min: 1, score_ask_table: 0})
|
63
|
+
c.scoreboard :players, :enable, ask_players, :craft_table
|
64
|
+
c.tellraw ask_players, {text: "Build a ", extra: [
|
65
|
+
{
|
66
|
+
text: "Crafting Table",
|
67
|
+
color: "yellow",
|
68
|
+
underlined: true,
|
69
|
+
clickEvent: {
|
70
|
+
action: "run_command",
|
71
|
+
value: "/trigger craft_table set 1"
|
72
|
+
}
|
73
|
+
},
|
74
|
+
{
|
75
|
+
text: "?"
|
76
|
+
}
|
77
|
+
]}.to_json
|
78
|
+
|
79
|
+
#Mark all players who have been asked
|
80
|
+
c.scoreboard :players, :set, ask_players, :ask_table, 1
|
81
|
+
|
82
|
+
#Get a player that is crafting a table
|
83
|
+
player = s(:a, {score_craft_table_min: 1})
|
84
|
+
|
85
|
+
#Tell the player that it is now building the crafting table
|
86
|
+
c.tellraw player, {text: "Now building a ", extra: [
|
87
|
+
{text: "Crafting Table", color: "yellow"},
|
88
|
+
{text: ". Please hold still for a moment..."}
|
89
|
+
]}.to_json
|
90
|
+
|
91
|
+
player << {c: 1}
|
92
|
+
|
93
|
+
#Create the armorstand
|
94
|
+
c.testfor player do |c|
|
95
|
+
c.summon 'ArmorStand', relative, "{CustomName:CraftingCreator,Invisible:true}"
|
96
|
+
end
|
97
|
+
|
98
|
+
#Teleport the armorstand one block below the player
|
99
|
+
armorstand = s(:e, {name: "CraftingCreator", type: 'ArmorStand'})
|
100
|
+
c.tp armorstand, player
|
101
|
+
c.tp armorstand, "~ ~-1 ~"
|
102
|
+
|
103
|
+
#Remove pattern
|
104
|
+
c.execute armorstand, relative, :fill, "~-1 ~ ~-1 ~1 ~ ~1", b('air'), 'replace'
|
105
|
+
|
106
|
+
#Create blocks for crafting table
|
107
|
+
c.execute armorstand, relative, :setblock, relative, b('dropper'), :replace, "{CustomName:Crafting Table}"
|
108
|
+
c.execute armorstand, relative, :summon, 'ItemFrame', '~ ~ ~-1', "{Facing:2,Item:{id:\"crafting_table\"}}"
|
109
|
+
c.execute armorstand, relative, :summon, 'ItemFrame', '~ ~ ~1', "{Facing:4,Item:{id:\"crafting_table\"}}"
|
110
|
+
|
111
|
+
#Reset scores for creating crafting table
|
112
|
+
c.scoreboard :players, :reset, player, :craft_table
|
113
|
+
c.scoreboard :players, :set, s(:a), :on_table, 0
|
114
|
+
|
115
|
+
#Find Stale Crafting Tables
|
116
|
+
crafting_tables = s(:e, {name: "CraftingTable", type: "ArmorStand"})
|
117
|
+
c.scoreboard :players, :set, crafting_tables, :ct_has_block, 0
|
118
|
+
c.execute crafting_tables, relative, :detect, relative, b("dropper"),
|
119
|
+
:scoreboard, :players, :set, s_self, :ct_has_block, 1
|
120
|
+
|
121
|
+
#Kill Stale Crafting Tables
|
122
|
+
c.kill s(:e, {score_ct_has_block: 0})
|
123
|
+
@crafting_recipes.map do |recipe|
|
124
|
+
blockItems, resultItems = [recipe[:pattern], recipe[:result]].map do |str|
|
125
|
+
str.split('').each_with_index.map do |letter, i|
|
126
|
+
(item = recipe[letter.to_sym]) ? "{" + item + ",Slot:#{i}b}" : nil
|
127
|
+
end.compact.join(",")
|
128
|
+
end
|
129
|
+
{
|
130
|
+
block: "{" +
|
131
|
+
"Items:[#{blockItems}]," +
|
132
|
+
"CustomName:\"Crafting Table\"" +
|
133
|
+
"}",
|
134
|
+
result: "{" +
|
135
|
+
"Items:[#{resultItems}],"+
|
136
|
+
"CustomName:\"Crafting Table\""+
|
137
|
+
"}"
|
138
|
+
}
|
139
|
+
end.each do |recipe|
|
140
|
+
c.scoreboard :players, :set, crafting_tables, :craft_success, 0
|
141
|
+
c.stats :entity, crafting_tables, :set, :SuccessCount, s_self, :craft_success
|
142
|
+
|
143
|
+
c.execute crafting_tables, relative, :testforblock, relative, 'dropper', 0, recipe[:block]
|
144
|
+
|
145
|
+
success_tables = s(:e, {name: "CraftingTable", type: "ArmorStand", score_craft_success_min: 1})
|
146
|
+
|
147
|
+
c.execute success_tables, relative, :blockdata, relative, recipe[:result]
|
148
|
+
|
149
|
+
c.stats :entity, crafting_tables, :clear, :SuccessCount
|
150
|
+
end
|
151
|
+
c.entitydata armorstand, "{CustomName:CraftingTable}"
|
152
|
+
end
|
153
|
+
def b(*args)
|
154
|
+
Helpers::Block.new(*args)
|
155
|
+
end
|
156
|
+
def e(*args)
|
157
|
+
Helpers::Entity.new(*args)
|
158
|
+
end
|
159
|
+
def s(*args)
|
160
|
+
Helpers::TargetSelector.new(*args)
|
161
|
+
end
|
162
|
+
def sp
|
163
|
+
s :p
|
164
|
+
end
|
165
|
+
def s_self
|
166
|
+
s :e, {r: 0, c: 1}
|
167
|
+
end
|
168
|
+
def coords(*args)
|
169
|
+
Helpers::Coordinates.new(*args)
|
170
|
+
end
|
171
|
+
def relative
|
172
|
+
coords('~', '~', '~')
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
@@ -9,10 +9,10 @@ module DiamondLang
|
|
9
9
|
@arguments = @arguments.merge arguments
|
10
10
|
end
|
11
11
|
def to_s
|
12
|
-
if @arguments
|
13
|
-
@variable + "[" + mc_args + "]"
|
14
|
-
else
|
12
|
+
if @arguments.empty?
|
15
13
|
@variable
|
14
|
+
else
|
15
|
+
@variable + "[" + mc_args + "]"
|
16
16
|
end
|
17
17
|
end
|
18
18
|
alias inspect to_s
|
@@ -17,6 +17,10 @@ module DiamondLang
|
|
17
17
|
@corner1 = coords("~#{@offset.x}", "~#{@offset.y}", "~#{@offset.z}").freeze
|
18
18
|
@corner2 = coords("~#{@offset.x._value + @length}", "~#{@offset.y._value + @height}", "~#{@offset.z._value + @width}").freeze
|
19
19
|
@surrond = surrond
|
20
|
+
|
21
|
+
@setup_commands = []
|
22
|
+
@tick_commands = []
|
23
|
+
@custom_crafting = nil
|
20
24
|
end
|
21
25
|
def startup(c)
|
22
26
|
c.gamerule(:commandBlockOutput, @output)
|
@@ -29,9 +33,22 @@ module DiamondLang
|
|
29
33
|
end
|
30
34
|
def create_commands(c)
|
31
35
|
chain = CommandChain.new self
|
36
|
+
chain.commands.push *@tick_commands
|
37
|
+
if @custom_crafting
|
38
|
+
@custom_crafting.tick chain
|
39
|
+
end
|
32
40
|
tick chain
|
33
|
-
commands =
|
34
|
-
|
41
|
+
commands = []
|
42
|
+
chain.commands.each do |command|
|
43
|
+
if command.chain
|
44
|
+
command.chain.each do |con_command|
|
45
|
+
con_command = con_command.to_block
|
46
|
+
con_command.conditional = true
|
47
|
+
commands.push command.to_block, con_command
|
48
|
+
end
|
49
|
+
else
|
50
|
+
commands.push command.to_block
|
51
|
+
end
|
35
52
|
end
|
36
53
|
command_lines = commands.each_slice(@length - 1).each_with_index.map do |line, z|
|
37
54
|
direction = z.even? ? 5 : 4
|
@@ -71,6 +88,7 @@ module DiamondLang
|
|
71
88
|
chain = CommandChain.new self
|
72
89
|
startup chain
|
73
90
|
setup chain
|
91
|
+
chain.commands.push *@setup_commands
|
74
92
|
create_commands chain
|
75
93
|
cleanup chain
|
76
94
|
chain
|
@@ -130,5 +148,10 @@ module DiamondLang
|
|
130
148
|
black: 15
|
131
149
|
}.freeze[color]
|
132
150
|
end
|
151
|
+
def add_crafting(recipes)
|
152
|
+
chain = CommandChain.new self
|
153
|
+
@custom_crafting = Helpers::CustomCrafting.new(chain, recipes)
|
154
|
+
@setup_commands.push *chain.commands
|
155
|
+
end
|
133
156
|
end
|
134
157
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diamond-lang
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben (@penne12_)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: require_all
|
@@ -154,6 +154,7 @@ files:
|
|
154
154
|
- VERSION
|
155
155
|
- diamond-lang.gemspec
|
156
156
|
- examples/conveyor.rb
|
157
|
+
- examples/custom_crafting.rb
|
157
158
|
- examples/hello_world.rb
|
158
159
|
- lib/diamond-lang.rb
|
159
160
|
- lib/diamond-lang/command_chain.rb
|
@@ -164,6 +165,7 @@ files:
|
|
164
165
|
- lib/diamond-lang/helpers/constants.rb
|
165
166
|
- lib/diamond-lang/helpers/coordinate.rb
|
166
167
|
- lib/diamond-lang/helpers/coordinates.rb
|
168
|
+
- lib/diamond-lang/helpers/custom_crafting.rb
|
167
169
|
- lib/diamond-lang/helpers/entity.rb
|
168
170
|
- lib/diamond-lang/helpers/errors/invalid_axis.rb
|
169
171
|
- lib/diamond-lang/helpers/errors/invalid_coordinate_value.rb
|