minecraft マイクラ あるきながら、高速ダンジョン作成
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
#contents
* はじめに [#yac3daf2]
あるきながら、ダンジョンの通路や部屋を作ったら、楽だろう...
そうがんがえ、マイクラ で、
歩くスピードで、ダンジョンつくるやり方を作りました。
ストラクチャーブロックの配置って、置く方角を気をつけるのが
面倒なので、それを、簡単にしちゃう方法の紹介となります。
* なんで、この記事をかいているのか [#eff31a5f]
ちょっと、ややこしいので、メモしたら、たくさん喜ぶ人が多...
マイクラのストラクチャーブロックと、functionコマンドをつ...
いま(2019/10/19)のところ、マイクラのJava版です。
* 準備は、だいたいこんなやり方 [#ad90fb4e]
大変だけど、これができたら、高位な錬金術師みたいになりま...
+ 実験用の新しいワールドを作成します。
+ ストラクチャーブロックでは、登録するだけで方角が、だい...
+ ダンジョンの通路とか、階段とかのサンプルをつくります。
+ ストラクチャーブロックに登録します。
+ 自作のコマンドを作るプログラムに、ストラクチャーの名前...
+ コマンドのテキストファイルができるので、functionが読め...
+ reloadコマンドでよみこみます。
+ function コマンドで、建築
+ 大体、立ち位置が気に入らないとか言って、微調整します。
+ reloadコマンドで、読み込みます。
+ 微調整をくりかえして、完成
* コマンド [#ja058d3b]
自分が作った建築の部品を、マイクラではストラクチャーと呼...
以下に示すコマンドは、自分の立っている場所と、向きを逆算...
ストラクチャーを、あるきながら、配置するように、するコマ...
** 引数 [#g629c0a7]
name: ストラクチャー名
x: ストラクチャーを配置したときの自分の相対位置
z:
y:
** コマンド例 [#h3938962]
実際に、どんなコマンドをつくるのかみてみましょう。
たとえば、
name: ストラクチャー名 : bath
x: 3
z: -1
y: -3
だとすると、
つくるコマンドは、次の6行になります。
最初の4行は、
- 北を向いているときは、北向きで登録してあるストラクチャ...
- 同様に、東
- 同様に、南
- 同様に、西
なので、上記のいずれかのストラクチャーブロックが、置かれ...
つづく2行の意味は、
- レッドストーンを置いて、ストラクチャーブロックを置きま...
- ストラクチャーが動いて、もういらないから、ストラクチャ...
execute if entity @p[y_rotation=-45..44] as @p positione...
execute if entity @p[y_rotation=45..135] as @p positione...
execute if entity @p[y_rotation=135..224] as @p position...
execute if entity @p[y_rotation=-135..-44] as @p positio...
execute as @p positioned ~ ~ ~ run setblock ~ ~3 ~ minec...
execute at @p positioned ~ ~2 ~ run fill ~ ~ ~ ~ ~1 ~ mi...
毎回これを作るのは、大変なので、自分は、excelやrubyなどで...
これをテキストファイルに保存して、ファイルを保存するので...
保存先が、最近のバージョンで、変更されまくって、特定する...
今のバージョン(1.14)ですと。
自分は
C:\Users\kh\AppData\Roaming\.minecraft\saves\structure...
というフォルダに、
bath.mcfunction
というファイル名で保存しています。
自分で調節できるのは、上記の
- kh
- ns01
- bath
ですね。ここに、自由に好きな名前が入れれます。
- khは、自分はパソコンに登録してある名前にしてますが、適...
- ns01は、登録するストラクチャーの種類を自分で勝手に入れ...
- bathは、たまたま、登録したストラクチャーがお風呂だった...
登録後は、reloadコマンドを使って、マイクラで使える状態に...
使うときは、上記の 名前の例ですと
function ns01:bath
となります。
* おまけ Rubyで、生成する箇所をオブジェクト指向でかいてみ...
回転行列を使っている感じを、伝えたかったので、
もっと、コンパクトにかけるのですが、意味が、分かるように...
あえて、オブジェクト指向的に書いてみました。
** makeMcFunction.rb [#j0197cb1]
*** 実行方法 [#v5ef495b]
例:
配置したいストラクチャー名がbathだとします。
配置後の自分のそのストラクチャーの場所のx座標が3
配置後の自分のそのストラクチャーの場所のz座標が-1
配置後の自分のy座標が5だとしますと、下記のようにコマンド...
ruby makeMcFunction.rb bath 3 5 -1
すると、テキストがコンソールに表示されるのです。
*** コード [#u5dfacbb]
一番下にある、メイン処理から、見た方が、わかりやすいかも。
# 引数をまとめます
strName = ARGV[0]
#座標のクラス
class Pos
def initialize(x, y, z)
@x = x
@y = y
@z = z
end
attr_accessor :x, :y, :z
def p
puts "x:" + x.to_s + ", y:" + y.to_s + ", z:" + z.t...
end
end
pos = Pos.new(ARGV[1].to_i, ARGV[2].to_i, ARGV[3].to_i)
# マイクラの方角についてのクラス
class Direction
def initialize(angle, clockwize)
# 向いている方向の範囲
@rs = angle - 45
@re = angle + 44
# 角度
@angle = angle
# マイクラの向きを意味する文字列
@clockwize = clockwize
end
attr_accessor :rs, :re, :angle, :clockwize
#向いている方向の時だけ実行するコマンド
def ifRot
return "execute if entity @p[y_rotation=" + rs.to_s ...
end
# 簡易 三角関数
def sin(x)
case x
when 0 then return 0
when 90 then return 1
when 180 then return 0
when -90 then return -1
end
end
# 簡易 三角関数
def cos(x)
case x
when 0 then return 1
when 90 then return 0
when 180 then return -1
when -90 then return 0
end
end
# 回転行列
def rotPos(pos)
x = pos.x * cos(@angle) - pos.z * sin(@angle)
z = pos.x * sin(@angle) + pos.z * cos(@angle)
return Pos.new(x.to_i, pos.y, z.to_i)
end
end
#東西南北
dList = []
dList[0] = Direction.new(0,"")
dList[1] = Direction.new(90,"CLOCKWISE_90")
dList[2] = Direction.new(180,"CLOCKWISE_180")
dList[3] = Direction.new(-90,"COUNTERCLOCKWISE_90")
# 文字列書き出し
def write(message)
puts message
end
# 自分の頭の上にブロックを置きます
def setBlock(name, y)
return "run setblock ~ ~#{y} ~ minecraft:#{name} "
end
# 自分の頭の上にストラクチャーブロックを置きます。
def setStrBlock(name, pos, rotation)
if rotation != "" then
rotation = ", rotation:" + rotation
end
return setBlock("structure_block", 2) + '{mode:"LOAD",...
end
#自分の頭のどの辺で、コマンドを実行するのか指定します。
def exePos(y)
if (y==0) then
y=""
end
return "execute as @p positioned ~ ~#{y} ~ "
end
# メイン処理
# 東西南北で、向いている方向どれか実行するコードを出力し...
# 例:execute if entity @p[y_rotation=-45..44] as @p pos...
for num in 0..3
write dList[num].ifRot + setStrBlock(strName, dList[nu...
end
# redstoneを置いて、実行するコード
write exePos(0) + setBlock("redstone_block", 3) + "repla...
# 頭上に置いたredstoneと、ストラクチャーブロックを消去
write exePos(2) + "run fill ~ ~ ~ ~ ~1 ~ minecraft:air r...
終了行:
#contents
* はじめに [#yac3daf2]
あるきながら、ダンジョンの通路や部屋を作ったら、楽だろう...
そうがんがえ、マイクラ で、
歩くスピードで、ダンジョンつくるやり方を作りました。
ストラクチャーブロックの配置って、置く方角を気をつけるのが
面倒なので、それを、簡単にしちゃう方法の紹介となります。
* なんで、この記事をかいているのか [#eff31a5f]
ちょっと、ややこしいので、メモしたら、たくさん喜ぶ人が多...
マイクラのストラクチャーブロックと、functionコマンドをつ...
いま(2019/10/19)のところ、マイクラのJava版です。
* 準備は、だいたいこんなやり方 [#ad90fb4e]
大変だけど、これができたら、高位な錬金術師みたいになりま...
+ 実験用の新しいワールドを作成します。
+ ストラクチャーブロックでは、登録するだけで方角が、だい...
+ ダンジョンの通路とか、階段とかのサンプルをつくります。
+ ストラクチャーブロックに登録します。
+ 自作のコマンドを作るプログラムに、ストラクチャーの名前...
+ コマンドのテキストファイルができるので、functionが読め...
+ reloadコマンドでよみこみます。
+ function コマンドで、建築
+ 大体、立ち位置が気に入らないとか言って、微調整します。
+ reloadコマンドで、読み込みます。
+ 微調整をくりかえして、完成
* コマンド [#ja058d3b]
自分が作った建築の部品を、マイクラではストラクチャーと呼...
以下に示すコマンドは、自分の立っている場所と、向きを逆算...
ストラクチャーを、あるきながら、配置するように、するコマ...
** 引数 [#g629c0a7]
name: ストラクチャー名
x: ストラクチャーを配置したときの自分の相対位置
z:
y:
** コマンド例 [#h3938962]
実際に、どんなコマンドをつくるのかみてみましょう。
たとえば、
name: ストラクチャー名 : bath
x: 3
z: -1
y: -3
だとすると、
つくるコマンドは、次の6行になります。
最初の4行は、
- 北を向いているときは、北向きで登録してあるストラクチャ...
- 同様に、東
- 同様に、南
- 同様に、西
なので、上記のいずれかのストラクチャーブロックが、置かれ...
つづく2行の意味は、
- レッドストーンを置いて、ストラクチャーブロックを置きま...
- ストラクチャーが動いて、もういらないから、ストラクチャ...
execute if entity @p[y_rotation=-45..44] as @p positione...
execute if entity @p[y_rotation=45..135] as @p positione...
execute if entity @p[y_rotation=135..224] as @p position...
execute if entity @p[y_rotation=-135..-44] as @p positio...
execute as @p positioned ~ ~ ~ run setblock ~ ~3 ~ minec...
execute at @p positioned ~ ~2 ~ run fill ~ ~ ~ ~ ~1 ~ mi...
毎回これを作るのは、大変なので、自分は、excelやrubyなどで...
これをテキストファイルに保存して、ファイルを保存するので...
保存先が、最近のバージョンで、変更されまくって、特定する...
今のバージョン(1.14)ですと。
自分は
C:\Users\kh\AppData\Roaming\.minecraft\saves\structure...
というフォルダに、
bath.mcfunction
というファイル名で保存しています。
自分で調節できるのは、上記の
- kh
- ns01
- bath
ですね。ここに、自由に好きな名前が入れれます。
- khは、自分はパソコンに登録してある名前にしてますが、適...
- ns01は、登録するストラクチャーの種類を自分で勝手に入れ...
- bathは、たまたま、登録したストラクチャーがお風呂だった...
登録後は、reloadコマンドを使って、マイクラで使える状態に...
使うときは、上記の 名前の例ですと
function ns01:bath
となります。
* おまけ Rubyで、生成する箇所をオブジェクト指向でかいてみ...
回転行列を使っている感じを、伝えたかったので、
もっと、コンパクトにかけるのですが、意味が、分かるように...
あえて、オブジェクト指向的に書いてみました。
** makeMcFunction.rb [#j0197cb1]
*** 実行方法 [#v5ef495b]
例:
配置したいストラクチャー名がbathだとします。
配置後の自分のそのストラクチャーの場所のx座標が3
配置後の自分のそのストラクチャーの場所のz座標が-1
配置後の自分のy座標が5だとしますと、下記のようにコマンド...
ruby makeMcFunction.rb bath 3 5 -1
すると、テキストがコンソールに表示されるのです。
*** コード [#u5dfacbb]
一番下にある、メイン処理から、見た方が、わかりやすいかも。
# 引数をまとめます
strName = ARGV[0]
#座標のクラス
class Pos
def initialize(x, y, z)
@x = x
@y = y
@z = z
end
attr_accessor :x, :y, :z
def p
puts "x:" + x.to_s + ", y:" + y.to_s + ", z:" + z.t...
end
end
pos = Pos.new(ARGV[1].to_i, ARGV[2].to_i, ARGV[3].to_i)
# マイクラの方角についてのクラス
class Direction
def initialize(angle, clockwize)
# 向いている方向の範囲
@rs = angle - 45
@re = angle + 44
# 角度
@angle = angle
# マイクラの向きを意味する文字列
@clockwize = clockwize
end
attr_accessor :rs, :re, :angle, :clockwize
#向いている方向の時だけ実行するコマンド
def ifRot
return "execute if entity @p[y_rotation=" + rs.to_s ...
end
# 簡易 三角関数
def sin(x)
case x
when 0 then return 0
when 90 then return 1
when 180 then return 0
when -90 then return -1
end
end
# 簡易 三角関数
def cos(x)
case x
when 0 then return 1
when 90 then return 0
when 180 then return -1
when -90 then return 0
end
end
# 回転行列
def rotPos(pos)
x = pos.x * cos(@angle) - pos.z * sin(@angle)
z = pos.x * sin(@angle) + pos.z * cos(@angle)
return Pos.new(x.to_i, pos.y, z.to_i)
end
end
#東西南北
dList = []
dList[0] = Direction.new(0,"")
dList[1] = Direction.new(90,"CLOCKWISE_90")
dList[2] = Direction.new(180,"CLOCKWISE_180")
dList[3] = Direction.new(-90,"COUNTERCLOCKWISE_90")
# 文字列書き出し
def write(message)
puts message
end
# 自分の頭の上にブロックを置きます
def setBlock(name, y)
return "run setblock ~ ~#{y} ~ minecraft:#{name} "
end
# 自分の頭の上にストラクチャーブロックを置きます。
def setStrBlock(name, pos, rotation)
if rotation != "" then
rotation = ", rotation:" + rotation
end
return setBlock("structure_block", 2) + '{mode:"LOAD",...
end
#自分の頭のどの辺で、コマンドを実行するのか指定します。
def exePos(y)
if (y==0) then
y=""
end
return "execute as @p positioned ~ ~#{y} ~ "
end
# メイン処理
# 東西南北で、向いている方向どれか実行するコードを出力し...
# 例:execute if entity @p[y_rotation=-45..44] as @p pos...
for num in 0..3
write dList[num].ifRot + setStrBlock(strName, dList[nu...
end
# redstoneを置いて、実行するコード
write exePos(0) + setBlock("redstone_block", 3) + "repla...
# 頭上に置いたredstoneと、ストラクチャーブロックを消去
write exePos(2) + "run fill ~ ~ ~ ~ ~1 ~ minecraft:air r...
ページ名: