diamond-lang 1.1.1 → 1.2.0
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.
- 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
|