うまげーむさん

ゲームの情報を主に投稿します。

【マインクラフト】最高効率全自動カボチャ工場の作り方 - Java版1.17サバイバル #3

はじめに

どうも。

イクラ1.17サバイバルパート3です。

今回は全自動カボチャ畑を作ります。

前回:

www.umagame.info

倉庫

f:id:Umagame:20210110163035p:plain

前回作ったツルハシに修繕をつけておきます。これからこのツルハシをメインに使っていきます。

f:id:Umagame:20210110163046p:plain

不吉な旗が落ちてました。最初ビビりましたが、どうやらアイアンゴーレムが旗持ちを倒した場合は襲撃が起こらないみたいです。

f:id:Umagame:20210110163051p:plain

倉庫を作りました。建築センスはこれから磨きます。

f:id:Umagame:20210110173641p:plain

内装はこんな感じで、できるだけチェストを詰め込みました。

この倉庫にはしばらくお世話になることでしょう。

ネザライト

せっかくなので、今持っているツールをネザライトにアップグレードしてみようと思います。

実は私、サバイバルでは一回もネザライトに触れたことがありません。(古代の残骸含めて)

f:id:Umagame:20210110163058p:plain

ダイヤ装備を村人からもらいました。これで即死は免れます。

f:id:Umagame:20210110163104p:plain

斧も作りました。battleaxeってつけちゃいましたが、採掘用です。

f:id:Umagame:20210110163110p:plain

醸造台を作ります。

f:id:Umagame:20210110163116p:plain

耐火のポーションをゲット。ネザライト集めには必須です。

f:id:Umagame:20210110163128p:plain

ネザーに来ました。今回はツルハシ(ブランチマイニング)で古代の残骸を集めていきます。

Y14が良いらしいので、Y14まで掘り下げます。

f:id:Umagame:20210110163136p:plain

F3+Gでチャンクの境界を表示させて、

f:id:Umagame:20210110163142p:plain

チャンクの境界の隣を掘っていきます。これもこうしたほうが良いらしいです。

f:id:Umagame:20210110163147p:plain

結構早めに見つかりました。

f:id:Umagame:20210110163152p:plain

初古代の残骸。

f:id:Umagame:20210110163156p:plain

30分ほど掘って、11個集まりました。今回はこれくらいでいいでしょう。

f:id:Umagame:20210110163201p:plain

焼いてかけらにします。

f:id:Umagame:20210110163207p:plain

金とクラフトして、

f:id:Umagame:20210110163213p:plain

アップグレード。初ネザライトです。

ネザライトはダイヤよりも採掘速度が早いらしいですが、あまり違いはわかりませんでした。(ツルハシに使うのはあまり良くないのかも...?)

f:id:Umagame:20210110163223p:plain

ついでにネザライトの剣も作りました。これはウィザースケルトンの頭蓋骨集めに使うつもりです。(これ、ゾンビとかスケルトンをクリティカルなしでワンパンできます。便利です。)

ネザライト集めはTNTのほうが効率が良いらしいので、クリーパートラップでも作ってからまた集めることにします。

f:id:Umagame:20210110163228p:plain

あと、村人の家を広くしました。

f:id:Umagame:20210110163234p:plain

中にベッドをたくさん置いています。なんか収容所みたいになりましたね。

カボチャ工場

それでは本題に移ります。全自動カボチャ工場を作っていきます。

f:id:Umagame:20210110163240p:plain

レールが必要なので、この前見つけた廃坑からゲットします。

f:id:Umagame:20210110210526p:plain

それでは作っていきます。9×10の深さ2ブロック分の穴を空けて、チェストとホッパーを置くスペースも作ります。(右手前のやつ)

f:id:Umagame:20210110163251p:plain

ここに2×2の穴を空けて、

f:id:Umagame:20210110163258p:plain

チェストとホッパーを置きます。

f:id:Umagame:20210110163304p:plain

次に、このように真ん中の列に深さ2ブロック分の穴を空けます。これはパワードレールに動力を送るRSトーチを置くためのスペースです。

f:id:Umagame:20210110163309p:plain

レッドストーントーチを置きます。

f:id:Umagame:20210110163314p:plain

このようにレールを敷き、ホッパー付きトロッコを走らせます。

今回はパワードレールを節約して10個しか使っていないので、ホッパートロッコにたくさんのアイテムが入った場合トロッコが止まります。(今回は小規模なので問題ないです)

f:id:Umagame:20210110163321p:plain

これでアイテム回収機構は完成です。土ブロックでレールの上を埋めます。

f:id:Umagame:20210110211350p:plain

ハーフブロックを置いてから、水を置きます。ハーフブロックを置き忘れるとレールが台無しになります。

f:id:Umagame:20210110163332p:plain

水の上に光源ブロックを置きます。ジャック・オ・ランタンはおすすめしません。カボチャと見間違えるので。

f:id:Umagame:20210110163337p:plain

こんな感じに土を耕します。

f:id:Umagame:20210110163343p:plain

耕した土に、カボチャの種を撒いていきます。

f:id:Umagame:20210110163350p:plain

カボチャ破壊用のピストンを置くので、このように仮の天井を作ります。

f:id:Umagame:20210110163356p:plain

下向きのピストンを置いていきます。ピストンの置く場所を間違えないように。

f:id:Umagame:20210110163402p:plain

こんな感じです。

f:id:Umagame:20210110163407p:plain

仮の天井を全て壊して、上向きのオブザーバーを置いていきます。

このオブザーバーは、カボチャが育ったときの蔓の形の変化を検出し、隣のピストンに動力を伝えます。(カボチャブロックが生成された瞬間に壊されるので、理論上は最高効率です)

f:id:Umagame:20210110163413p:plain

このように敷き詰めます。

f:id:Umagame:20210110163420p:plain

オブザーバーの上に、レッドストーンダストを置きます。

f:id:Umagame:20210110163425p:plain

後はこのように周りをブロックで囲みます。これで完成です。

小規模な割には結構生産効率が良いです。おすすめです。

さいごに

今回はこの辺で終わります。

前回言いましたが、現在スナップショットでプレイしているので、むやみにワールドを広げることができないんですよね。

もうすぐスナップショットが来るはずなので、次回はバージョンアップしてから投稿します。おそらく。

【マインクラフト】超簡単なスポナートラップの作り方(ゾンビ・スケルトン)アイテム・経験値を大量にゲット! - Java版1.17サバイバル #2

はじめに

どうも。

1.17サバイバルパート2です。前回はこちらから:

www.umagame.info

前回書いてませんでしたが、1.17って洞窟の生成システムも変わるんですよね。

今やっているバージョン(20w51a)はほぼ1.16みたいなものなので、もうちょっと待ってからやったほうが良かったということに気が付きました。ちょっと後悔しています。

なので、なるべくワールドを広げすぎないようにすることにします。

(バージョンの変更によるバグなどでプレイができない場合は、一生スナップショットでプレイします。タイトルは1.17サバイバルのままですが。)

 

さて、今回はスポナートラップ(ゾンビ)を作っていきます。

記事の内容に不十分な点などありましたら、ご報告よろしくお願いします。

スポナートラップを作る

スポナーの仕様

トラップを作る前に、マインクラフトにおけるMobスポナーの仕組みを知っておきましょう。

f:id:Umagame:20210103204741p:plain

9×9×3の直方体

スポナーは、スポナーブロックを中心に9×9×3(幅9ブロック・奥行き9ブロック・高さ3ブロック)の直方体の中でMobがスポーン可能な場所を探し、見つけたらそこにMobをスポーンさせます。

そして、スポナーが作動するにはスポナーとプレイヤーの距離が17ブロック以下である必要があります。(こちらは17×17×17ブロックではなく、スポナーを中心とした半径17ブロックの球体)

また、スポナーを中心とする9×9×9ブロックの中に6体以上、スポナーと同じ種類のMobがいる場合スポーンしません。

(厳密にはスポナー中心ではなく、スポナーの8つの角のうちのX座標とZ座標がともに最小である角を中心とするらしいですが、トラップ自体に影響はないので無視します)

なので、スポナートラップを作るためには、主に以下の3つの機構が必要になります。

  • スポナーがモンスターをスポーンさせるために必要な空間
  • スポーンしたモンスターをスポナーから遠ざけるための水路(スポナーのスポーンが止まってしまうのを防ぐ)
  • モンスターに落下ダメージを与えるための水路(水流エレベーター)

スポナー周り

f:id:Umagame:20210103204748p:plain

まず、スポナーを中心に9×9×5の範囲を掘り抜きます。(スポナーから壁まで4ブロック分、天井・床まで2ブロック分空けます)

9×9×5にしている理由は、ゾンビとスケルトンのスポーンに高さ2ブロック分の空間が必要なのと、下に移動させるための水路を作るためです。(なので、上と下1ブロック分広くしてあります)

f:id:Umagame:20210103204754p:plain

そして、4つの壁のうちの一つにこのような穴を空けます。穴の長さは6ブロック分です。

穴を開けた方向に処理部分を作るので、どっちに空けるかはよく考えましょう。(私の場合は洞窟でスポナー部屋を見つけたので、洞窟のある方向に向かって穴を空けました。)

穴の6ブロック目にモンスターが落ちてくることになるので、松明などで目印を付けておきます。

f:id:Umagame:20210103204810p:plain

目印を付けたら、丸石などのブロックで穴を塞ぎ、長さが3ブロック分になるようにします。

f:id:Umagame:20210104154047p:plain

横から見た図です。

水路の作成

次に水路を作っていきます。

f:id:Umagame:20210103204816p:plain

まず、無限水源を作っておきます。4つの水源が必要なので、4つ水入りバケツを持っているなら必要ないです。

f:id:Umagame:20210103204828p:plain

このように、穴と反対側の2つの角に水を置きます。

f:id:Umagame:20210103204834p:plain

水流がない部分を1ブロック分掘り下げます。

f:id:Umagame:20210103204839p:plain

さっきの穴をこのように掘って、

f:id:Umagame:20210103204849p:plain

2つのフェンスを置きます。

f:id:Umagame:20210104154635p:plain

フェンスを置いたら、上の画像の赤く囲ってあるブロックを掘ります。

そうすると、フェンスのところまで水が流れていきます。

f:id:Umagame:20210103204857p:plain

フェンスの奥のところに土ブロックを置きます。スクリーンショットでは丸石になっていますが、土ブロックを置いてください。

f:id:Umagame:20210103204902p:plain

置いた土ブロックの上に立って、真上に掘り進めていきます。

掘ったトンネルの長さが27ブロックになるようにしてください。(私の場合はスポナーの高度が高かったので地上に出ました)

f:id:Umagame:20210103204909p:plain

一番上に水源を置きます。水の高さが27ブロック分になっていればOKです。

f:id:Umagame:20210103204916p:plain

下に戻って、2番目のフェンスの上に2つ看板を設置します。

f:id:Umagame:20210103204922p:plain

そして、さっき流した水流の奥を1ブロック分掘り、

f:id:Umagame:20210103204928p:plain

土ブロック(画像では丸石)の上にブロックを置いて、

f:id:Umagame:20210103204934p:plain

それを壊してください。

これでさっき水流の置くに空けた穴に水流が入り込みます。

f:id:Umagame:20210103204940p:plain

水流をすべて水源化するために、昆布を置いていきます。水流の高さが不安な方は、昆布をちょうど27個持ってやると良いです。

f:id:Umagame:20210103204948p:plain

f:id:Umagame:20210103204953p:plain

昆布を回収して、土ブロックをソウルサンドに置き換えます。

f:id:Umagame:20210103204959p:plain

これで水流エレベーターの完成です。

f:id:Umagame:20210103205042p:plain

次に横に3マス掘り、下に23ブロック分掘り下げます。(水流エレベーターの一番上の水源が流れるようにしてください)

f:id:Umagame:20210103205047p:plain

穴のところに看板を置きます。

f:id:Umagame:20210103205021p:plain

掘り下げて松明がある場所に着けばうまくいっています。

f:id:Umagame:20210103205058p:plain

水流エレベーターの一番上から、23ブロック分下の場所にホッパー、チェストを置きます。(23ブロック分落下するとちょうどハート半分までHPが削れます。高さを間違えると私のように64レベが無に帰します。)

f:id:Umagame:20210103205107p:plain

これでほぼ完成です。スポナー部屋の松明を取り除きましょう。

f:id:Umagame:20210103205113p:plain

処理部屋では、このようにハーフブロックを置くことでモンスターからのダメージを防ぐことができます。

f:id:Umagame:20210104164420p:plain

横から見た図です。

作ってる途中で結構ミスった部分があったので、わかりにくいかもしれません。すみません。

よくわからない方は、23ブロック以下なら何ブロックでもいいです。何なら水流エレベーターを作らなくてもOKです。

村人厳選

本題はここで終わりです。ここからはおまけです。

前回見つけた村人を厳選していきます。

f:id:Umagame:20210105161912p:plain

村の俵をパンにして村人にあげます。

f:id:Umagame:20210105161923p:plain

f:id:Umagame:20210105161928p:plain

見たことない服...ジャングルがあるからかな?

f:id:Umagame:20210105161940p:plain柵で囲って出れないようにしておきます。

f:id:Umagame:20210105161934p:plain

ブランチマイニング場も作っておきました。

f:id:Umagame:20210105161952p:plain

幸運かシルクタッチがついたツルハシが欲しくなったので、エンチャントテーブルを作ります。

本棚は図書館から確保します。

f:id:Umagame:20210105161957p:plain

エンチャント本を発見。悪くない。

f:id:Umagame:20210105161947p:plain

厳選します。まずは農民から。

今の所小麦と人参があるので、どっちも買い取ってくれるやつにしました。(最安値は狙いません。時間がかかりそうなので)

 

 

f:id:Umagame:20210105162020p:plain

次に司書を厳選します。

今の所ほしいのは修繕、耐久力Ⅲ、効率強化、幸運あたりですかね。

厳選の方法は単純で、求職者状態の村人の近くでただひたすら職業ブロックを置いたり壊したりするだけです。

f:id:Umagame:20210105162026p:plain

シルクタッチを発見。間違えて殴ったので値段が高くなりました。

シルクタッチはまだいらないかな...

f:id:Umagame:20210105162030p:plain

もっと安いシルクタッチを発見。一応キープ。

f:id:Umagame:20210105162103p:plain

 ボートに乗せて、

f:id:Umagame:20210105162109p:plain

f:id:Umagame:20210105162114p:plain

こんな感じにしておきます。ハーフブロックを置いてるのは子供ゾンビ対策です。

厳選を続けていきます。

f:id:Umagame:20210105162042p:plain

修繕。案外すぐに出ました。

f:id:Umagame:20210105162048p:plain

耐久力Ⅲも発見。順調。

f:id:Umagame:20210105162052p:plain

幸運Ⅲはちょっと出にくかったです。一応ランダムのはずですが...

 

f:id:Umagame:20210105162120p:plain

こんな感じになりました。効率強化は全然出なかったので、一旦エンチャントをしようと思います。

f:id:Umagame:20210105162127p:plain

ゾンビトラップの経験値でエンチャント。効率強化がついてないので、厳選を続けるしかないようです。

 

f:id:Umagame:20210105162147p:plain

!!

効率強化Ⅳですか...Ⅴも出るはずなので、見送ります。

f:id:Umagame:20210105162158p:plain

ダメージ増加Ⅴ。一応キープ。(今考えるとこれはいらなかったかも)

f:id:Umagame:20210105162203p:plain

やっと出ました。長かった。

 

f:id:Umagame:20210105162213p:plain

交換して、

f:id:Umagame:20210105162208p:plain

金床を置いて、

f:id:Umagame:20210105162224p:plain

エンチャントをつけます。

f:id:Umagame:20210105162235p:plain

エメラルドがないので修繕はまた今度。

f:id:Umagame:20210105164842p:plain

統計より。

書見台を641回壊したと表示されているので、641回司書リセマラをしたことになります。きつかった。

さいごに

今回はこの辺で終わります。

次回:

www.umagame.info

【マインクラフト】サバイバルはじめました - Java版1.17サバイバル #1

はじめに

どうも。あけましておめでとうございます。

去年の12/17から記事出してなかったのは理由があります。Google Adsenseが無効なトラフィックで停止されてました。

そのせいでモチベーションがほぼゼロになったので、ずっとさぼってました。すみません。

(「無効なトラフィック」というのは、広告が同じアクセス元から何回もクリックされることで、Google Adsenseはこれを検知するとそのアカウントの広告の配信をストップします。私の場合ははてなブログでやっているので、これを防ぐのはかなりめんどくさい、というかほぼ不可能みたいです。)

 

今日やっと制限が解除されたので、新しいシリーズを始めてみようと思います。

マインクラフトバージョン1.17がもうすぐリリースされるので、サバイバルをやります。

ただ、普通にサバイバルやるだけだとアクセス数が稼げないちょっと物足りないので、Mobトラップなどの施設の作り方を中心にやっていこうと思います。

まあ今回は第1回なので、とりあえずエンダードラゴン倒すまでやります。

新しい世界

f:id:Umagame:20210103160020p:plain

ワールドを新しく作ります。ちなみにバージョンはスナップショット20w51aです。

ボーナスチェストなし、難易度ノーマル(後ほど変える可能性があるので、固定はしません)、シード値はランダムです。

f:id:Umagame:20210103160026p:plain

ジャングルです。初期スポーンジャングルは人生初...だと思います。

石ツール作るまでは割愛します。見飽きていると思うので。

f:id:Umagame:20210103160033p:plain

ジャングルバイオームの良いところは、なんと言ってもこの竹ですね。

足場ブロックがめちゃくちゃ有能なので、わざわざジャングルを探しに行く手間が省けました。

f:id:Umagame:20210103160038p:plain

銅鉱石見つけました。新要素ですね。

今の所使い道は避雷針、銅ブロック、双眼鏡ぐらいしかないので正直いらない子です。

f:id:Umagame:20210103160045p:plain

ゾンビスポナーがありました。

いつのバージョンからかは知りませんが、ゾンビスポナーから村人ゾンビが出なくなったので微妙ですね。使いみちは牧師のレベル上げぐらいしかありません。

f:id:Umagame:20210103160051p:plain

f:id:Umagame:20210103160056p:plain

宝箱は一見良さげ...に見えますが、ノッチリンゴとかの宝箱限定アイテムがあまりないですね。レコードもかぶってる上に金色だし。

まあ、司書の厳選が必要なくなったのでシルクタッチの本は普通に嬉しいです。

f:id:Umagame:20210103160103p:plain

ネザーゲートの跡みたいなのを見つけました。ここで自分の運の良さに気づき始めます。

f:id:Umagame:20210103160110p:plain

チェストの中身は微妙...かな?RTAやってるわけでもないので。

ちなみに金ツルハシには修繕がついてました。誰得?

ネザー・エンドの準備

f:id:Umagame:20210103160115p:plain

ジャングルの欠点に気づきました。動物が全然いないので食料がスイカぐらいしかない。

仕方なくスイカを栽培します。

f:id:Umagame:20210103160121p:plain

ついでに小麦、人参も植えておきます。

f:id:Umagame:20210103160133p:plain

前言撤回。宝の山を見つけました。

序盤の選択肢が増えるのが最新バージョンの良いところですね。

f:id:Umagame:20210103160137p:plain

渓谷を探索していたら、廃坑を見つけました。

蜘蛛スポーンで糸を無限化できれば、足場ブロックを大量に作れそうです。運が良い。

f:id:Umagame:20210103160143p:plain

ここで、糸からベッドを作れるということに気づきました。家畜なんていらなかった。

f:id:Umagame:20210103160148p:plain

廃坑のチェストはあんまり期待できないですね。ダイヤって今でも入ってるんですかね?

f:id:Umagame:20210103160205p:plain

ブランチマイニングしようと思い、Y11まで掘り下げたらすぐダイヤがありました。運が良い。

いつもならダイヤツルハシなしでネザーゲートを作りますが、今回はこのネザーゲートの残骸を回収しておきます。

f:id:Umagame:20210103160211p:plain

!!!

スポナーのある洞窟を自宅にしようと準備を進めていたら、見つけてしまいました。

さらに自分の強運に気づき始めます。

f:id:Umagame:20210103160218p:plain

とりあえず、村人のベッドと職業ブロックをこの家に全部移動させました。これで安心です。

豪運

f:id:Umagame:20210103160224p:plain

さて、場所は変わってネザーです。

ネザーゲートとそこまで離れていない場所に要塞を見つけました。

以前の記事でも言ったことがありますが、エンドラ討伐においてネザー要塞を見つけるのが一番難しいです。これはマジです。

f:id:Umagame:20210103160233p:plain

座標を記録しておきます。とりあえず、今必要なのはブレイズロッドのみですね。

f:id:Umagame:20210103160240p:plain

人生において、すべての物事がうまくいくことなんてありません。

いつもならワールドを削除してましたが、流石にそんなことはしません。

ネザー要塞を見つけれただけマシだ...と思いアイテムを回収しにいきます。

(私のMinecraftIDは気にしないでください。)

f:id:Umagame:20210103160245p:plain

!!!!!

アイテムの2分の3ほどが残っていました。ブレイズロッド10本と、スクショではよく見えませんがダイヤツルハシも残ってます。(鉄チェストプレートの右上あたり)

自分の豪運に気づきました。

f:id:Umagame:20210103160251p:plain

歪んだ森バイオームでエンダーマン狩りをします。

ピグリンとの交換よりも、こっちのほうが確実です。

f:id:Umagame:20210103160256p:plain

ネザーにもありました。今回はチェストなしのようです。

f:id:Umagame:20210103160304p:plain

要塞がまたありました。最初見つけたところとは別の場所です。

最初のやつと同じ要塞である可能性もありますが、もしそうだとしたら相当でかいです。

f:id:Umagame:20210103160312p:plain

未だにこのMobの名前を覚えていません。ストライダーっていうみたいですね。

サドル付きのスポーン確率は3%らしいです。

ザ・ネクストジェネレーション

f:id:Umagame:20210103160320p:plain

これでエンドに行けます。

f:id:Umagame:20210103160326p:plain

装備はこんな感じです。水バケツとベッドを忘れないように。

f:id:Umagame:20210103160332p:plain

道中で、凝灰岩を見つけました。中にはアメジストが入っています。

f:id:Umagame:20210103160338p:plain

アメジストは銅よりさらに使い道が限られてるので、今のところは放置。

f:id:Umagame:20210103160344p:plain

掘り下げたらスケルトンスポナーがありました。チェストはまた今度でいいでしょう。

f:id:Umagame:20210103160350p:plain

発見。

f:id:Umagame:20210103160355p:plain

ポータル部屋到着。チェストにいらないものを入れて、ベッドでリスポーン地点を設定します。

リス地設定を忘れると結構やばいことになります。

f:id:Umagame:20210103160400p:plain

装備はこんな感じ。弓はスケルトンからゲットしました。

f:id:Umagame:20210103160406p:plain

ここで、チェストにエンダーパールをしまったことを後悔します。

エンド攻略の際は、エンダーパールをすべてエンダーアイにせずに少しだけ残しておくようにしましょう。

f:id:Umagame:20210103160415p:plain

無限水源を作っておきます。これは最後まで意味ありませんでした。

f:id:Umagame:20210103160420p:plain

水バケツで登ります。

f:id:Umagame:20210103160427p:plain

クリスタルを壊すときに、ブロックを間に置いておきます。効果があるかは不明。

f:id:Umagame:20210103160434p:plain

エンダーマンがエンダードラゴンを追いかけています。これってなんで起こるんでしょうね。

f:id:Umagame:20210103160456p:plain

クリスタルを全部壊したので、この辺でエンダードラゴンが降りてくるのを待ちます。

f:id:Umagame:20210103160503p:plain

口から漏れる紫の口臭が降下のサインです。

f:id:Umagame:20210103160514p:plain

経験値量を見ればわかりますが、一回死にました。

f:id:Umagame:20210103160524p:plain

ザ・ネクストジェネレーション。

f:id:Umagame:20210103160533p:plain

3.96時間(=3時間57分36秒)でクリア。ようやくエンドラ討伐が慣れてきました。

f:id:Umagame:20210103160539p:plain

ポータル部屋のマグマを使ってネザーゲートを作り、ネザー経由で帰ります。

火打ち石はなかったので作りました。

さいごに

今回はこの辺で終わります。

あっさりラスボス(本当にラスボス?)を倒しましたが、このシリーズはまだ始まったばかりです。

とりあえず次回は序盤で必要な施設(村人増殖、スポナートラップなど)を作ると思います。

あと、次回からはもっと解説記事っぽくなります。

次回:

www.umagame.info

【マインクラフト】1.16におけるRTA(スピードラン)の流れを解説 #2 ネザー~エンドラ討伐までのチャート

はじめに

どうも。

RTAチャート解説です。

前回のやつはこちらから:

www.umagame.info

ネザー攻略

さて、ネザーに到達しましたが.....。1.16のアップデートで、ネザーはさらに難易度が高くなりました。(まあ簡単になったと思う方もいるかもですが)

f:id:Umagame:20201202053742p:plain

ネザーに入る前に、作れるならベッドを作ってリスポーン地点を設定しておきましょう。

f:id:Umagame:20201202052902p:plain

このようにネザーにバイオームが追加されたため、運が悪い場合は長距離の移動が必要になります。

なのでネザーゲートの座標をある程度覚えておきましょう。

f:id:Umagame:20201202052918p:plain

マグマにちょっと浸かっただけでも死にます。気をつけましょう。

f:id:Umagame:20201202052923p:plain

f:id:Umagame:20201202052928p:plain

ネザーに入ってまずやることは、金のブーツを作ることです。

これはプレイヤーが一つ以上の金装備をつけている場合、ピグリンが中立になるためです。

f:id:Umagame:20201202052934p:plain

これで安全に取引ができます。

f:id:Umagame:20201202052945p:plain

低確率で出るエンダーパールを狙います。エンダーパールがでなくても、光の矢や建材ブロックは後ほど使えるのでできるだけたくさん交換しましょう。

f:id:Umagame:20201202052913p:plain

取引と同時並行で、エンダーマンも倒しておきます。この緑っぽいバイオームはエンダーマンがスポーンしやすいです。

ピグリン、エンダーマンでエンダーパールを集めるとともに、ネザー要塞も探します。

ネザー要塞はZ軸に沿って生成される傾向があるらしいので、X軸に沿って移動しましょう。

f:id:Umagame:20201202052951p:plain

正直、ネザー要塞を見つけるのが一番むずかしい気がします。完全にランダムなので。

f:id:Umagame:20201202052955p:plain

鉄が余っていたので、盾を作っておきます。もちろん必須ではありません。

f:id:Umagame:20201202053002p:plain

スポナーを見つけて、ブレイズ狩りをします。

f:id:Umagame:20201202053007p:plain

スポナーはこのように天井があるもののほうが効率良く倒せます。

もし近くに無ければ、自分で天井を作ってブレイズが上へ行かないようにしましょう。

f:id:Umagame:20201202053747p:plain

ブレイズロッドは、エンダーアイのみに使うので8本あれば十分です。

f:id:Umagame:20201202053757p:plain

エンダーアイを作ります。スクショでは14個作っていますが、もうちょっとあったほうがいいです。

要塞発見~エンド突入

あ、「要塞」っていうのは、エンドのゲートがある構造物のことです。

探し方は皆さんご存知の通り、エンダーアイが向かった方向に進んでいくだけです。

エンダーアイを使いすぎて足りなくなる、ということが無いように節約しましょう。

f:id:Umagame:20201202173704p:plain

今回は海の中にありました。海にあると見つけやすい上に、ボートで素早く移動できるので運が良かったです。

エンドゲートの場所は完全にランダムなので、特にゲート部屋を見つけるテクニック等はありません。頑張って探しましょう。

f:id:Umagame:20201202173711p:plain

ゲート部屋のスポナーブロックを壊して、ベッドでリスポーン地点を設定しておきます。

f:id:Umagame:20201202173716p:plain

エンドラ攻略に最低限必要な物資はだいたいこんな感じですね。

  • ツール(剣、ツルハシ)
  • 弓と、矢(40本以上)
  • 水バケツ
  • 食料
  • 建材ブロック(1スタックほど)

ちなみに、弓矢は雪玉でも代用できます。(その場合は、雪玉を雪ブロックに圧縮して持ち運びましょう)

エンドラ討伐

ついにエンドです。黒曜石の足場が本土と離れている場合は、落ちないように気をつけましょう。

f:id:Umagame:20201202174037p:plain

弓でエンドクリスタルを破壊します。矢は有限なのでよく狙って。

f:id:Umagame:20201202174046p:plain

このように鉄格子で囲われているエンドクリスタルも、隙間から矢を入れることで破壊できます。

高い位置にあって壊すのが難しいクリスタルは、ブロックでのぼってから壊しましょう。(降りるときは、水バケツで落下ダメージを防ぎましょう)

f:id:Umagame:20201202190635p:plain

ベッドでドラゴンにダメージを与えるときは、突進してきたときにこのようにブロックを置けばダメージを食らうことなく爆発できます。

f:id:Umagame:20201202190642p:plain

ベッドをすべて使ったあとは、このようにドラゴンが真ん中に来たときにジャンプ斬りでダメージを与えます。

f:id:Umagame:20201202174056p:plain

倒したらクリアです。お疲れさまでした。

f:id:Umagame:20201202174105p:plain

統計画面から、クリアにどのくらい時間がかかったかを確認することができます。

私の場合は1.70hなのでだいたい1時間42分ですね。ちょっとネザーで時間を使いすぎました。

言い訳のようになりますが、サバイバルでは久しくエンダードラゴンを倒していない上に、1.16のアップデートについてあまり知らなかったのでまだ良い方だと思います。。。

さいごに

今回はここまでです。

実際にやってみて、結構面白かったです。

シードによって全然ワールドが違ってくるので、まだまだ楽しめそうです。

【マインクラフト】1.16におけるRTA(スピードラン)の流れを解説 #1 ネザー突入までのチャート

はじめに

どうも。

最近マインクラフトに再びハマりだしたので、今回もマインクラフトです。

今回は、マインクラフトバージョン1.16におけるRTAの大まかなやり方を解説していきます。

ここでいうRTAとは、ランダムなシードのワールドでの、グリッチ(バグ)なしのスピードランです。

ちなみに、私はまだRTA歴が浅い(というかほぼ無い)ので情報に間違いがあるかもしれません。ご了承ください。

また、このシリーズで使用するスクショはすべて同じワールドで取ったというわけではないです。

RTAをやる前に

RTAをやる前に、まず設定するべきことがいくつかあります。

f:id:Umagame:20201201190500p:plain

まず、サウンド設定から「字幕の表示」をオンにしておきましょう。

これで、周りの音が聞こえなくても何が鳴っているかわかります。(特に、近くのマグマやモンスターに有効)

あと、キー設定は基本変えなくても良いですがホットバーのキー(デフォルトで1~9に設定されているやつ)は変えておいたほうがいいかもしれません。

クラフトのときに役立ちます。

ゲーム開始~鉄入手

それでは解説を始めていきます。

まず、ワールドを始めた時点でゴミシードを引いたら、即リセットです。

f:id:Umagame:20201201191752p:plain

こんな感じの孤島や、砂漠、海などは超タイムロスになるのでリセットしましょう。

f:id:Umagame:20201128164704p:plain

まず、木を取りましょう。最初は原木4ぐらいでOKです。(斧ができたら、後で補充します)

f:id:Umagame:20201128171752p:plain

木のツルハシを作って、

f:id:Umagame:20201128171758p:plain

丸石3個取って石のツルハシを作って、

f:id:Umagame:20201128171810p:plain

丸石14個取って剣、斧、シャベル、かまどを作ります。(一応、剣は斧でも代用できます)

f:id:Umagame:20201128171815p:plain

斧で食料を確保しておきます。羊毛はベッドの材料にもなるので良いです。

f:id:Umagame:20201128171821p:plain

鉄を取ります。最低でもバケツと火打ち石の分の4個は必要です。ネザーやエンドが苦手な方は、余分に取って防具も作っておきましょう。

f:id:Umagame:20201128171832p:plain

砂利を壊して火打ち石を確保します。忘れがち。

f:id:Umagame:20201128171844p:plain

バケツ、火打ち石、防具を作ります。

村を見つけた場合

村を見つけた場合は、上記の作業をする必要がなくなります。

f:id:Umagame:20201201194448p:plain

まず、パンを作るために俵をを回収します。クワで速く回収できます。

f:id:Umagame:20201201194453p:plain

家からベッドを盗みます。寝たときの爆発でエンダードラゴンに大ダメージを与えることができます。

f:id:Umagame:20201201194505p:plain

そして最後にアイアンゴーレムから鉄を回収します。ドロップ数が3~5なので、運ゲーです。

わざわざ村を探す必要はあまりありません。見つけたらラッキー程度です。

ネザーゲートを作る

バケツを手に入れたら、もうネザーに行く準備は整いました。

f:id:Umagame:20201128171904p:plain

まず、水を回収しておきます。

そして溶岩湖を探しましょう。草原や砂漠が探しやすいです。

見つけたら、以下の手順で素早くネザーゲートを作りましょう。

f:id:Umagame:20201128211645p:plain

まず、マグマと同じ高さに一つブロックを置き(スクショでいうと丸石)、その横に水を配置します。

 

f:id:Umagame:20201128211651p:plain

おいたブロックを壊すとこのように黒曜石ができます。

f:id:Umagame:20201128211658p:plain

次に、このような形にブロックを配置します。

f:id:Umagame:20201128211704p:plain

ここに水を配置して、

f:id:Umagame:20201128211710p:plain

f:id:Umagame:20201128211715p:plain

マグマを回収して置く、の繰り返しでネザーゲートを作ります。

f:id:Umagame:20201128211725p:plain

最後にここの2マスを掘り、

f:id:Umagame:20201128211732p:plain

マグマを置けばゲートが完成です。

f:id:Umagame:20201128211737p:plain

水を回収して火打ち石でゲートを開きましょう。

このやり方がうまくわからない、という方のために一応動画を貼っておきます。

www.youtube.com

さいごに

短いですが今回はここまでです。

次回はネザーからエンダードラゴン討伐までやります。

訂正などあれば気軽にコメントください。

マインクラフトが今後絶対に廃れないと断言できる理由 - うまげーむの雑記 #3

はじめに

どうも。

ネタがなくなったので雑記を書いてみます。

 

最近はこちらのAmong Us用語集の記事がすごく人気です。感謝します。

www.umagame.info

需要はある程度あるだろうと予想していましたが、こんなにも反響があるとは思いもしませんでした。

その影響もあって、ブログに対するモチベーションが下がっているにも関わらずPV数は過去より伸びています。

やっぱりコンテンツ選びって重要なんですね。。。

 

今回は久しぶりの雑記です。マインクラフトについて語ります。

最近、マインクラフトが再注目されている

私がこの記事を書くきっかけとなったのがこちらの動画です。

www.youtube.com

そうです。フォートナイトで人気を博したあのTfueが、マインクラフトのRTAをやるという動画です。

Tfueは現在フォートナイトをやめてWarzoneのプロになっていますが、なぜ彼が今更マインクラフトの動画(しかもRTA)を投稿したのでしょうか...

その理由は、マインクラフトが海外で再び注目されているからなんです。

登録者1000万人超えYoutuber「Dream」

ではなぜ、今マインクラフトが人気になっているのでしょうか?

その要因の一つとして、海外の人気Youtuber「Dream」があります。

Dream氏のYoutubeチャンネル:

www.youtube.com

彼はマインクラフトのRTA走者で、チャンネル登録者は現在1300万人います。

彼の動画の主な内容は、「RTA走者(Dream)が、3~4人のハンター達に追われながらエンダードラゴンを討伐する」というもので、えげつない人気を誇っています。

一番再生されている動画:

www.youtube.com

色々なアイテムを駆使して、ハンター達を翻弄するゲームプレイが見どころです。

彼の動画の切り抜きなど多く投稿されており、まるでフォートナイトやApexのプロゲーマーのようです。

マインクラフトのミーム

「Meme」(ミーム)って、皆さんご存知ですか?

調べたら分かるかと思いますが、ネットで話題になる(ネタにされる)物事のことです。(今でいうとグルメスパイザーとか逆走爺とかですかね。私はあまり詳しくありませんが)

当然マインクラフトは超有名なので、ミームはめちゃくちゃ作られます。

特に有名なのは2019年に流行った「Revenge」という曲の一節ですね。

www.youtube.com

曲の初めの「Creeper? Aww man」というやつです。これはPewDiePie氏の「Youtube Rewind 2019, but it's actually good」にも登場するほどネタにされました。

後は、「Cursed Minecraft Images」(直訳:呪われたマインクラフトの画像)というやつも人気です。こちらも2019年に流行りました。

Minecraft Cursed Images - YouTube

Minecraft | Cursed Images 05 (Mining Animals) - YouTube

Phoenix SC / Hamish on Twitter: "Minecraft | Cursed Images 24 (Chicken  Nuggets) https://t.co/00I2tI2DNF… "

こういう感じの、どこかおかしいマインクラフトの画像がredditなどで多く投稿されています。

こちらのミームも、マインクラフトというコンテンツの人気に影響を与えていると思われます。

おまけ:マインクラフトの遊び方

本題はここで終わりです。

ここからは、私がたまにやるマインクラフトの楽しい遊び方を紹介します。(ブログの宣伝がてら)

マルチプレイ

まず、マルチプレイですね。

大きく分けてHypixelなどの人気のサーバーをプレイする方法と、友達と一緒にプレイする方法の2つがあります。

Java版で友達とやる場合はサーバーを立てないとプレイできない一方、Modなどを入れて遊べるのでより楽しくなります。

Java版の簡単なサーバーの立て方はこちらから:

www.umagame.info

ModPack

こちらはJava版を持っている方限定です。

ModPackと呼ばれる、Modがたくさん入ったゲームモードで遊びます。

ModPackについてはこちらから:

www.umagame.info

RTA

さっき取り上げたDream氏のように、マインクラフトのRTA(スピードラン)に試してみるのも面白いです。

Twitchでのマインクラフトの配信は大半がRTAだったりします。

Mod制作

時間はかかりますが、Java版のModを作ってみるのも良いかも。。。

このブログで作り方を紹介してます。

www.umagame.info

さいごに

今回はここまでです。

私はこの世で一番面白いゲームはマインクラフトだと思っています。

【Hypixel】Housingでアスレチック(Parkour)マップを作ってみる

今回はHypixelのHousingで遊びます。

はじめに

いつもは「〇〇のやり方」みたいなタイトルですが、Housingでのアスレチックマップの作り方なんて需要皆無(多分)なので、作るだけです。

HypixelのHousingでは、好きなマップ(House)を作ったり、誰かが作ったマップに遊びに行ったりできます。

マップの内容は色々ありますが、今回は比較的人が集まりやすい、アスレチックのマップを作ります。

Houseの設定

Houseに入る

まず、コンパスからHousingのロビーへ行きます。

f:id:Umagame:20200512155024p:plain

自分のHouseは真ん中のNPCから入れます。

f:id:Umagame:20200512154942p:plain

Houseは複数持つことができます。(VIPなら2個、MVPなら3個)

一つ空いていたので、これを使います。

f:id:Umagame:20200512155029p:plain

テーマ

まずはテーマを変えましょう。

「Themes」をクリックして変えれます。

f:id:Umagame:20200512160046p:plain

おすすめは「Basic Theme」です。

超シンプルなので、負荷がかかりません。

f:id:Umagame:20200512155031p:plain

こんな感じです。

f:id:Umagame:20200512155046p:plain

名前

次に、Houseの名前を変えましょう。

普通にメニューから変えることもできますが、今回はコマンドを使って変えます。

コマンドを使って変える理由としては、装飾コードが使えるからです。

装飾コードについてはWikiに詳しく書いてあります。

https://minecraft-ja.gamepedia.com/装飾コードMinecraft Wiki

コマンドでは§(セクション)の記号が使えないので、代わりに&を使います。

今回は「&5&kAAA&d&lPARKOUR&5&kAAA」としました。

f:id:Umagame:20200512160825p:plain

その他の設定

設定をしていきます。

Houseの設定は、「House Settings」と、

f:id:Umagame:20200512161201p:plain

「Permissions and Groups」から変えれます。

f:id:Umagame:20200512161220p:plain

まず、「House Settings」から。

  • Time Selector・・・時間を設定できます。
  • Max Players・・・Houseに入れる最大人数の設定です。(左クリックで増加、右クリックで減少)
  • Set House Name・・・Houseの名前設定です。(コマンドがあるので必要ないです)
  • Plot Size・・・Houseのサイズのアップグレードです。(たしかMystery Dustで開放できます。あまり覚えてない。)
  • House Tags・・・Houseのカテゴリです。Houseの検索などに影響します。
  • House Language・・・Houseの言語です。こちらも検索に影響します。
  • Parkour Announce・・・アスレチックを誰かがクリアしたときのメッセージの設定です。(ALLで常に通知、RECORDで記録を破った時のみ通知、OFFで非表示)
  • Messages・・・Houseの参加・退出メッセージの切り替えです。
  • Cookie Jar・・・もらったクッキーの数です。(クッキーについては後ほど)
  • Save Locations・・・プレイヤーが入り直したときに、位置を保持するかどうかです。
  • Door/Fence Auto-Reset・・・ドアなどが、自動的に閉まるかどうかです。
  • PVP + Damage Settings・・・PVP関連の設定です。

今回はタグと言語だけいじります。

「House Tags」をクリックして、Parkour(アスレ)とMaze(迷路)を選択します。

f:id:Umagame:20200512162928p:plain

言語は日本語と、英語にしておきます。

f:id:Umagame:20200512162945p:plain

次に、「Permission and Groups」です。

ここでは、Housingにある3つの役職(Guest、Resident、Co-Owner)の権限の設定をすることができます。

  • Fly・・・飛べるかどうかです。アスレマップなのでGuestはオフにしましょう。
  • Wood / Iron Door・・・木や鉄のドアが開けれるかどうかです。
  • Wood / Iron Trap Door・・・木や鉄のトラップドアが開けれるかどうかです。
  • Fence Gate・・・フェンスゲートが開けれるかどうかです。
  • Button・・・ボタンが押せるかどうかです。
  • Slime・・・
  • /tp・・・/tpコマンドが使えるかどうかです。
  • Tp Others・・・他のプレイヤーを/tpコマンドで移動できるかどうかです。
  • Chat・・・チャットができるかどうかです。スパム対策のための時間も設定できます。
  • Pet Spawning・・・ペットをスポーンできるかどうかです。
  • Build・・・Houseを編集できるかどうかです。
  • Fluid・・・天気を変えたり、液体を設置できるかどうかです。

作っていく

設定が終わったら、いよいよ作っていきます。

この後紹介するParkour BlockやPro Toolを使って、自由にマップを作ります。

スタート地点・チェックポイント・ゴール

「Items」の、

f:id:Umagame:20200512163236p:plain

Parkour Block」を使うことでスタート地点などを作ることができます。

f:id:Umagame:20200512163239p:plain

最初に置いたところがスタート地点になります。

3個以上になると、間に置いたものがチェックポイントになります。

f:id:Umagame:20200512163243p:plain

Pro Tool

メニュー左上の「Pro Tool」を使うことで、効率的にマップ作りができます。

f:id:Umagame:20200512164320p:plain

コピーとか色々とできますが、今回は一番使うであろうFillツールの紹介だけします。

まず、「Region Selection Tool」を使って、範囲選択をします。

クリックすると棒が手に入るので、それで二箇所選択します。(左クリックで地点A、右クリックで地点Bを選択でき、その2つの地点を含む直方体が範囲になります)

f:id:Umagame:20200512164324p:plain

2箇所クリックしたら、「Fill Tool」をクリックしてバケツを手に入れます。

f:id:Umagame:20200512164325p:plain

バケツを右クリックして好きなブロックを入れると、

f:id:Umagame:20200512164329p:plain

このように一瞬で建築が出来上がります。

f:id:Umagame:20200512164403p:plain

アスレを作るときに気をつけること

アスレマップは、クリアした人全員にResidentをあげるものが多いです。(というか、ResidentをくれるHouseには人が集まりやすい)

人をたくさん呼びたかったら、Houseの名前に「WIN=RES」などと入れてあげると結構きます。多分。

また、スポーン地点の近くにルールを書いた看板を設置しておきましょう。

f:id:Umagame:20200512173415p:plain

こういうのを置いておかないと、たまに「スキップしてもいいですか?」みたいなことを言ってくるプレイヤーが出てきます。

また、「どうやってやるの?」みたいなことを言われる可能性もあるので、少しの英語力は必要です。(無理なら、ルールにそれとなく書いておきましょう。)

さいごに

Housing、結構楽しいのでぜひ皆さんもやってみてください。

ちなみに、私のMCIDはこのブログのaboutページにありますので、Hypixelやってるって人はフレンドください。(Twitterなどで教えていただけると幸いです)

https://www.umagame.info/about

【Java版マインクラフト 1.15.2+】マルチサーバーの立て方まとめ【Hamachi、Aternos】

<格安レンタルサーバーを使ったサーバーの立て方もこちらで紹介しています!>

www.umagame.info

 

今回はマインクラフトのサーバーの立て方を解説します。

はじめに

Java版マインクラフトは他のゲームと違って、マルチプレイをするのが結構面倒です。

色々方法はありますが、今回はAternos、Hamachiの2つの方法を紹介します。

ポート開放も紹介しようと思いましたが、できませんでした。(理由は後ほど)

Aternosを使う方法(簡単)

Aternosの概要

まず、一番簡単なAternosを使う方法を紹介します。

Aternosとは、WEB上でマインクラフトのサーバーを立てることができるシステムで、完全無料です。

Aternosのメリット・デメリット

Aternosを使うメリットとしては、

  • 複雑な手順なしにすぐ開ける
  • サーバーの管理を簡単にできる
  • ModPack、プラグインなどを自由に入れることができる

デメリットは、

  • ラグい(Pingは300msを超えます)
  • ずっとブラウザを開いていないといけない

この中でもラグいのは結構致命的です。

開き方

サイトはこちら:https://aternos.org/:ja/

サイトに入って、右の「プレイ」を押します。

f:id:Umagame:20200428153406p:plain

すると、ログインするよう言われるのでアカウントを作成するか、Googleなどでログインします。

f:id:Umagame:20200428154420p:plain

次に、ユーザー名とサーバーIP、サーバーの説明欄を設定します。

ユーザー名は自由に設定して、IPは「◯◯◯.aternos.me」の◯◯◯を自由に設定できます。(もちろん他のプレイヤーのものと被るとだめです)

「アカウント作成」を押して次に進みます。

f:id:Umagame:20200428155629p:plain

この画面まで来たらOKです。

ここからサーバーを開いたり、設定などをすることができます。

f:id:Umagame:20200428160706p:plain

左のサイドバーを軽く説明すると、

  • 「サーバー」・・・サーバーの起動ができる
  • 「コンソール」・・・サーバーを開いているときに、コマンドをうったりできる
  • 「ログ」・・・サーバーのログを表示
  • 「設定」・・・サーバーの設定ができます
  • 「ソフトウェア」・・・プラグインなどをサーバーに入れることができます
  • 「接続プレイヤー」・・・サーバーに入っているプレイヤーの管理ができます
  • 「ワールド」・・・サーバーのワールドをダウンロードしたりアップロードできます

Hamachi、ポート開放を使う方法(おすすめ)

Hamachiの概要

Hamachiとは、この後解説するポート開放の手順をする必要なく、他のプレイヤーをサーバーに入れることができるサービスです。

Hamachiのメリット・デメリット

Hamachiを使うメリットとしては、

  • ポート開放の必要がない
  • ラグくない

デメリットは、

  • サーバーの準備に時間がかかる

HamachiではAternosより準備できるまでの時間がかかりますが、ラグがほどんどないです。(PC環境に左右されます)

ポート開放とは

ポート開放とは、外部からのアクセスが必要なときにする設定で、やり方はルーターによって変わります。

ポート開放ではおそらくHamachiよりラグが少なくなりますが、PC環境によってはポート開放をするのが困難な場合もあります。(私の場合がそうです。色々な方法を試しましたが、おそらく不可能です。)

PCやルーター周りの知識がある程度ある場合は、Hamachiよりこちらのほうがいいでしょう。

開き方

Hamachiもポート開放も、最初の手順はすべて同じです。

まず、https://mcversions.netへ行き、好きなバージョンのサーバーをダウンロードします。

「Download」をクリックして、

f:id:Umagame:20200429094247p:plain

「Download Server Jar」をクリックします。

f:id:Umagame:20200429094252p:plain

好きなフォルダに「server.jar」という名前で置きます。(今回はデスクトップに新しくフォルダを作りました。)

f:id:Umagame:20200429094432p:plain

ダウンロードが完了したら、server.jarをダブルクリックで一回開きます。

すると、logs、eula.txt、server.propertiesという3つのファイルが生成されます。

f:id:Umagame:20200429094638p:plain

次に、生成されたeula.txtをメモ帳などで開きます。

f:id:Umagame:20200429094951p:plain

EULAというのは利用規約のことで、マインクラフトのサーバーを開くなら利用規約を読んでください的なことが書いてあります。

読まなくても別に大丈夫です。下の「eula=false」を「eula=true」に書き換えます。

f:id:Umagame:20200429095228p:plain

書き換えた後に「server.jar」を起動すると、このようにサーバーが立ち上がります。

ですが、これはいらないので閉じておきます。(閉じるまで少し時間がかかります)

f:id:Umagame:20200429095544p:plain

サーバーが立ち上がると同時に、さっきのフォルダにさらにいろいろとファイルが生成されます。

f:id:Umagame:20200429095839p:plain

これらのファイルを少し解説すると、

  • logs・・・サーバーのログがこのフォルダに保存されます
  • world・・・さっきサーバーを立ち上げたときに生成されたワールドデータ
  • banned-ips.json・・・サーバーからIPBANされているプレイヤーのリスト
  • bannned-players.json・・・サーバーからBANされているプレイヤーのリスト
  • ops.json・・・OP権限を所持しているプレイヤーのリスト
  • server.properties・・・サーバーの設定をするファイル
  • usercache.json・・・ユーザーのキャッシュに関するファイル(ほぼ使いません)
  • whitelist.json・・・ホワイトリストに入っているプレイヤーのリスト

server.properties以外は使う頻度が少ないです。

server.propertiesの内容は、こちらのサイトに詳しく書いてありますので参考にしてみてください。

https://minecraft.server-memo.net/server-properties/

また、メモリに余裕のある方はメモリ割り当てもしておいたほうがいいでしょう。

batファイルを使ったメモリ割り当ての方法は、いろいろなところで説明されていると思いますので省きます。

開き方(Hamachi

サーバーの設定が完了したらhttps://vpn.netに行き、Hamachiインストーラーをダウンロードします。

f:id:Umagame:20200429103548p:plain

ダウンロードしたhamachi.msiを開いて、インストールをします。

このように他のアプリのインストールを勧めてくる場合もあるので注意しましょう。

f:id:Umagame:20200429104032p:plain

インストールが完了したら、Hamachiを起動しましょう。

起動したら、まずは電源ボタンを押します。

f:id:Umagame:20200429105115p:plain

そうするとログインするよう言われるので、右上の「サイン アップ」をクリックしてアカウントを作成します。

f:id:Umagame:20200429105121p:plain

必要な情報はメールアドレスのみです。

f:id:Umagame:20200429105126p:plain

ログインしたら、「ネットワーク」→「新規ネットワークの作成」をクリックして、新しくネットワークを作ります。

ネットワークID(何でもいいです)とパスワードを入力します。

f:id:Umagame:20200429105133p:plain

ネットワークが作れたら、後は友達のPCにもHamachiを入れてもらって、「既存のネットワークに参加」からネットワークに入るよう言いましょう。

後は、電源ボタンの右の文字をクリックして出てくる「IPv4アドレスをコピー」をクリックして、それをマインクラフトのサーバーアドレスの部分にペーストすればサーバーに接続できます。

f:id:Umagame:20200429110550p:plain

開き方(ポート開放)

先程行った通り、私のPC環境ではなぜかポート開放ができないので割愛します。

他のサイトを参考にやってみてください。

さいごに

何かミスや、不具合などあればコメントお願いします。

Forgeありのサーバーの開き方も今度解説するつもりです。

ではでは。

【マインクラフト Modding】1.15対応 自作MODの作り方 #13 液体

このシリーズのまとめはこちら:

umagame.hatenablog.jp

どうも。

はじめに

今回は液体を作ります。泥です。

前回:

umagame.hatenablog.jp

液体を作る

液体登録用クラス

まず、アイテムやブロックと同じように、initに液体を登録するクラスを作ります。

f:id:Umagame:20200405110250p:plain

ソースコードの中に、まだ作っていないFluidMudというクラスがあるのでエラーが出ますが気にせずに。

package com.umagame.dirtmod.init;

import com.umagame.dirtmod.fluid.FluidMud;
import com.umagame.dirtmod.main.DirtMod;

import net.minecraft.fluid.Fluid;
import net.minecraft.tags.FluidTags;
import net.minecraft.tags.Tag;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
import net.minecraftforge.registries.ObjectHolder;

@ObjectHolder(DirtMod.MOD_ID)
public class DirtModFluids {

    public static final FluidMud.Flowing FLOWING_MUD = null;
    public static final FluidMud.Source MUD = null;

    public static class Tags {
        public static final Tag<Fluid> MUD = new FluidTags.Wrapper(new ResourceLocation(DirtMod.MOD_ID, "mud"));
    }

    @Mod.EventBusSubscriber(modid = DirtMod.MOD_ID, bus = Bus.MOD)
    public static class Register {

        @SubscribeEvent
        public static void registerFluids(final RegistryEvent.Register<Fluid> event) {
            final Fluid[] fluids = {
                    new FluidMud.Flowing().setRegistryName(DirtMod.MOD_ID, "flowing_mud"),
                    new FluidMud.Source().setRegistryName(DirtMod.MOD_ID, "mud")
            };

            event.getRegistry().registerAll(fluids);
        }
    }
}

3つIDを入力するところがあるので忘れないように。

液体のクラス

液体のクラスをfluidパッケージに作ります。

f:id:Umagame:20200405110757p:plain

液体の場合は複雑で、いつものようにクラスを継承してメソッドの戻り値を設定する...だけではできないので、とりあえずコピペしてください。

package com.umagame.dirtmod.fluid;

import com.umagame.dirtmod.init.DirtModBlocks;
import com.umagame.dirtmod.init.DirtModFluids;
import com.umagame.dirtmod.item.ItemMudBucket;
import com.umagame.dirtmod.main.DirtMod;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.FlowingFluidBlock;
import net.minecraft.fluid.FlowingFluid;
import net.minecraft.fluid.Fluid;
import net.minecraft.fluid.IFluidState;
import net.minecraft.item.Item;
import net.minecraft.state.StateContainer.Builder;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.IWorldReader;
import net.minecraftforge.fluids.FluidAttributes;

public abstract class FluidMud extends FlowingFluid{

    @Override
    public Fluid getFlowingFluid() {
        return DirtModFluids.FLOWING_MUD;
    }

    @Override
    public Fluid getStillFluid() {
        return DirtModFluids.MUD;
    }

    @Override
    protected boolean canSourcesMultiply() {
        return true;
    }

    @Override
    protected void beforeReplacingBlock(IWorld worldIn, BlockPos pos, BlockState state) {
        @SuppressWarnings("deprecation")
        TileEntity tileentity = state.getBlock().hasTileEntity() ? worldIn.getTileEntity(pos) : null;
        Block.spawnDrops(state, worldIn.getWorld(), pos, tileentity);
    }

    @Override
    protected int getSlopeFindDistance(IWorldReader worldIn) {
        return 4;
    }

    @Override
    protected int getLevelDecreasePerBlock(IWorldReader worldIn) {
        return 1;
    }

    @Override
    public Item getFilledBucket() {
        return new ItemMudBucket();
    }

    @Override
    protected boolean func_215665_a(IFluidState p_215665_1_, IBlockReader p_215665_2_, BlockPos p_215665_3_,
        Fluid p_215665_4_, Direction p_215665_5_) {
        return p_215665_5_ == Direction.DOWN && !p_215665_4_.isIn(DirtModFluids.Tags.MUD);
    }

    @Override
    public int getTickRate(IWorldReader p_205569_1_) {
        return 5;
    }

    @Override
    protected float getExplosionResistance() {
        return 100.0F;
    }

    @Override
    protected BlockState getBlockState(IFluidState state) {
        return DirtModBlocks.MUD.getDefaultState().with(FlowingFluidBlock.LEVEL, Integer.valueOf(getLevelFromState(state)));
    }

    @Override
    public boolean isEquivalentTo(Fluid fluidIn) {
        return fluidIn == DirtModFluids.MUD || fluidIn == DirtModFluids.FLOWING_MUD;
    }

    @Override
    protected FluidAttributes createAttributes() {
        return FluidAttributes.builder(new ResourceLocation(DirtMod.MOD_ID, "block/mud_still"), new ResourceLocation(DirtMod.MOD_ID, "block/mud_flow"))
                .translationKey("block.dirtmod.mud")
                .build(this);
    }

    public static class Flowing extends FluidMud {

        @Override
        protected void fillStateContainer(Builder<Fluid, IFluidState> builder) {
            super.fillStateContainer(builder);
            builder.add(LEVEL_1_8);
        }

        @Override
        public boolean isSource(IFluidState state) {
            return false;
        }

        @Override
        public int getLevel(IFluidState state) {
            return state.get(FluidMud.LEVEL_1_8);
        }

    }

    public static class Source extends FluidMud {

        @Override
        public boolean isSource(IFluidState state) {
            return true;
        }

        @Override
        public int getLevel(IFluidState p_207192_1_) {
            return 8;
        }

    }
}

少し解説すると、

  • getFlowingFluidとgetStillFluidで液体を指定
  • canSourcesMultiplyで無限水源になるかどうかを指定
  • getFilledBucketで液体の入ったバケツのアイテムを指定(後ほど作ります)
  • createAttributesで、IDの指定が必要なので忘れずに
  • FlowingとSourceクラスで、それぞれのisSourceとgetLevelの値を分けています
  • 他のメソッドは、液体自体の設定です(今回は水と同じ挙動をするようにしています。)

これでさっきの登録用クラスのエラーがなくなったかと思います。

液体ブロックの追加

液体のブロックとしてのクラスも必要になるので、blockに新しくクラスを作ります。

f:id:Umagame:20200405111855p:plain

FlowingFluidBlockを継承して、superの中に登録用クラスの液体と、Propertiesを設定します。

IDの設定も必要なので忘れずに。

package com.umagame.dirtmod.block;

import com.umagame.dirtmod.init.DirtModFluids;
import com.umagame.dirtmod.main.DirtMod;

import net.minecraft.block.FlowingFluidBlock;
import net.minecraft.block.material.Material;

public class BlockMud extends FlowingFluidBlock{

    public BlockMud() {
        super(() -> DirtModFluids.MUD, Properties.create(Material.WATER).doesNotBlockMovement().hardnessAndResistance(100.0F).noDrops());
        this.setRegistryName(DirtMod.MOD_ID, "mud");
    }
}

ちなみに、私の場合superの行で謎のエラーが出ました。

その時はonEntityCollisionというメソッドをオーバーライドしたらなぜか直ったのですが、普通にEclipseを再起動しても大丈夫かと思います。

あと、ブロック登録用クラスで登録しておいてください。

ブロック登録についてはこちら:

umagame.hatenablog.jp

液体バケツの追加

itemに、液体の入ったバケツのクラスを作ります。

f:id:Umagame:20200405113443p:plain

BucketItemを継承して作ります。

package com.umagame.dirtmod.item;

import com.umagame.dirtmod.init.DirtModFluids;
import com.umagame.dirtmod.main.DirtMod;

import net.minecraft.item.BucketItem;

public class ItemMudBucket extends BucketItem{

    public ItemMudBucket() {
        super(() -> DirtModFluids.MUD,new Properties().group(DirtMod.DIRTMOD_TAB));
        this.setRegistryName("mud_bucket");
    }
}

登録も忘れずに。

アイテム登録についてはこちら:

umagame.hatenablog.jp

とりあえずこれで起動してみます。

テクスチャのない液体が追加されていることが分かります。

f:id:Umagame:20200405110054p:plain

ですが、この液体を触れても当たり判定がなく、泳ぐことができません。

これは修正が必要です。

修正・テクスチャ

少し調べたところ、タグというものをいじればいいっぽいです。

src/main/resources/data/minecraft/tags/fluidsに、water.jsonというファイルを作り、

f:id:Umagame:20200405123632p:plain

このように記述します。

{
  "replace": false,
  "values": [
    "minecraft:water",
    "minecraft:flowing_water",
    "dirtmod:mud",
    "dirtmod:flowing_mud"
  ]
}

こうすることにより、追加した液体で泳ぐことができるようになります。

この場合追加した液体にwaterというタグをつけていることになるので、おそらく液体登録用クラスの中に作ったタグの意味はなくなります。(めんどくさいのでこのままでやります)

テクスチャの設定は、バニラの水を参考にして作ります。

textures/blockにpngとmcmetaファイルを追加して、(mcmetaの中身はバニラの水のものと同じです)

f:id:Umagame:20200405124149p:plain

models/blockにmud.jsonを作ってこのように入力し、

{
    "textures": {
        "particle": "block/mud_still"
    }
}

blockstatesにmud.jsonを作ってこのように入力します。

{
    "variants": {
        "": { "model": "block/mud" }
    }
}

これで起動すると、テクスチャが反映され、泳げるようになります。

f:id:Umagame:20200405124500p:plain

バケツのテクスチャは過去記事を参考にして設定してください。

さいごに

今回はここまでです。

不具合等あればご報告お願いします。

次回は未定です。

【マインクラフト Modding】1.15対応 自作MODの作り方 番外編 #1 アイテムティア、アーマーマテリアルの修正

このシリーズのまとめはこちら:

umagame.hatenablog.jp

どうも。

はじめに

今回はアイテムティアとアーマーマテリアルクラスの修正をするだけの記事です。

Enumを使ってなかったのがさすがに気持ち悪かったので。

ツール、防具の記事はこちら:

umagame.hatenablog.jp

umagame.hatenablog.jp

アイテムティア

ツールの記事のときに作ったアイテムティアのクラス(ItemTierDirt.java)を消して、新しくinitにクラスを作ります。

f:id:Umagame:20200403130714p:plain

Enumを使って作ります。

package com.umagame.dirtmod.init;

import com.umagame.dirtmod.block.BlockSuperCompressedDirt;

import net.minecraft.item.IItemTier;
import net.minecraft.item.ItemTier;
import net.minecraft.item.crafting.Ingredient;

public enum DirtModItemTiers implements IItemTier {

    DIRT(ItemTier.IRON.getHarvestLevel(),
            ItemTier.STONE.getMaxUses(),
            ItemTier.IRON.getEfficiency(),
            ItemTier.STONE.getAttackDamage(),
            ItemTier.IRON.getEnchantability(),
            Ingredient.fromItems(new BlockSuperCompressedDirt().asItem()));

    private final int harvestLevel;
    private final int maxUses;
    private final float efficiency;
    private final float attackDamage;
    private final int enchantability;
    private final Ingredient repairMaterial;

    DirtModItemTiers(int harvestLevel, int maxUses, float efficiency, float attackDamage, int enchantability, Ingredient repairMaterial) {
        this.harvestLevel = harvestLevel;
        this.maxUses = maxUses;
        this.efficiency = efficiency;
        this.attackDamage = attackDamage;
        this.enchantability = enchantability;
        this.repairMaterial = repairMaterial;
    }

    @Override
    public int getHarvestLevel() {
        return harvestLevel;
    }

    @Override
    public int getMaxUses() {
        return maxUses;
    }

    @Override
    public float getEfficiency() {
        return efficiency;
    }

    @Override
    public float getAttackDamage() {
        return attackDamage;
    }

    @Override
    public int getEnchantability() {
        return enchantability;
    }

    @Override
    public Ingredient getRepairMaterial() {
        return repairMaterial;
    }
}

そして、もともとnew ItemTierDirt()と書いていた部分を直します。

package com.umagame.dirtmod.item.tool;

import com.umagame.dirtmod.init.DirtModItemTiers;
import com.umagame.dirtmod.main.DirtMod;

import net.minecraft.item.AxeItem;

public class ItemDirtAxe extends AxeItem{

    public ItemDirtAxe() {
        super(DirtModItemTiers.DIRT,7,-3.2F,new Properties().group(DirtMod.DIRTMOD_TAB));
        this.setRegistryName("dirt_axe");
    }
}

これでOKです。

アーマーマテリアル

アーマーマテリアルの方も同様に修正します。

f:id:Umagame:20200403131138p:plain

 

package com.umagame.dirtmod.init;

import com.umagame.dirtmod.block.BlockSuperCompressedDirt;

import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ArmorMaterial;
import net.minecraft.item.IArmorMaterial;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

public enum DirtModArmorMaterials implements IArmorMaterial{
    DIRT("dirtmod:dirt",
            15,
            new int[] {1,4,5,2},
            ArmorMaterial.IRON.getEnchantability(),
            SoundEvents.ITEM_ARMOR_EQUIP_LEATHER,
            ArmorMaterial.CHAIN.getToughness(),
            Ingredient.fromItems(new BlockSuperCompressedDirt().asItem()));

    private static final int[] MAX_DAMAGE_ARRAY = new int[]{13, 15, 16, 11};
    private final String name;
    private final int maxDamageFactor;
    private final int[] damageReductionAmountArray;
    private final int enchantability;
    private final SoundEvent soundEvent;
    private final float toughness;
    private final Ingredient repairMaterial;

    private DirtModArmorMaterials(String nameIn, int maxDamageFactorIn, int[] damageReductionAmountsIn, int enchantabilityIn, SoundEvent equipSoundIn, float p_i48533_8_, Ingredient repairMaterial) {
        this.name = nameIn;
        this.maxDamageFactor = maxDamageFactorIn;
        this.damageReductionAmountArray = damageReductionAmountsIn;
        this.enchantability = enchantabilityIn;
        this.soundEvent = equipSoundIn;
        this.toughness = p_i48533_8_;
        this.repairMaterial = repairMaterial;
    }

    public int getDurability(EquipmentSlotType slotIn) {
        return MAX_DAMAGE_ARRAY[slotIn.getIndex()] * this.maxDamageFactor;
    }

    public int getDamageReductionAmount(EquipmentSlotType slotIn) {
        return this.damageReductionAmountArray[slotIn.getIndex()];
    }

    public int getEnchantability() {
        return this.enchantability;
    }

    public SoundEvent getSoundEvent() {
        return this.soundEvent;
    }

    public Ingredient getRepairMaterial() {
        return this.repairMaterial;
    }

    @OnlyIn(Dist.CLIENT)
    public String getName() {
        return this.name;
    }

    public float getToughness() {
        return this.toughness;
    }
}

 

package com.umagame.dirtmod.item.armor;

import com.umagame.dirtmod.init.DirtModArmorMaterials;
import com.umagame.dirtmod.main.DirtMod;

import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ArmorItem;

public class ItemDirtHelmet extends ArmorItem{

    public ItemDirtHelmet() {
        super(DirtModArmorMaterials.DIRT,EquipmentSlotType.HEAD,new Properties().group(DirtMod.DIRTMOD_TAB));
        this.setRegistryName("dirt_helmet");
    }
}

これでOKです。

さいごに

次回の番外編は未定です。

銃の作り方とかやるかも。

Mod制作自体モチベ下がってきてるので、更新頻度は下がります。申し訳ない。

【マインクラフト Modding】1.15対応 自作MODの作り方 #12 ディメンション

このシリーズのまとめはこちら:

umagame.hatenablog.jp

こんばんは。

記事のストックがやばいのでもうすぐ毎日投稿が終わります。多分。

はじめに

今回はディメンションを作ります。

前回:

umagame.hatenablog.jp

ディメンションを作る

ディメンションのクラス

まずはディメンションのクラスをworld/dimensionに作ります。

f:id:Umagame:20200328232116p:plain

Dimensionを継承して、メソッド、コンストラクタを追加します。

package com.umagame.dirtmod.world.dimension;

import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import net.minecraft.world.dimension.Dimension;
import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.ChunkGenerator;

public class DimensionDirt extends Dimension{

    public DimensionDirt(World p_i225788_1_, DimensionType p_i225788_2_, float p_i225788_3_) {
        super(p_i225788_1_, p_i225788_2_, p_i225788_3_);
        // TODO 自動生成されたコンストラクター・スタブ
    }

    @Override
    public ChunkGenerator<?> createChunkGenerator() {
        // TODO 自動生成されたメソッド・スタブ
        return null;
    }

    @Override
    public BlockPos findSpawn(ChunkPos chunkPosIn, boolean checkValid) {
        // TODO 自動生成されたメソッド・スタブ
        return null;
    }

    @Override
    public BlockPos findSpawn(int posX, int posZ, boolean checkValid) {
        // TODO 自動生成されたメソッド・スタブ
        return null;
    }

    @Override
    public float calculateCelestialAngle(long worldTime, float partialTicks) {
        // TODO 自動生成されたメソッド・スタブ
        return 0;
    }

    @Override
    public boolean isSurfaceWorld() {
        // TODO 自動生成されたメソッド・スタブ
        return false;
    }

    @Override
    public Vec3d getFogColor(float celestialAngle, float partialTicks) {
        // TODO 自動生成されたメソッド・スタブ
        return null;
    }

    @Override
    public boolean canRespawnHere() {
        // TODO 自動生成されたメソッド・スタブ
        return false;
    }

    @Override
    public boolean doesXZShowFog(int x, int z) {
        // TODO 自動生成されたメソッド・スタブ
        return false;
    }

}

 とりあえずコンストラクタは3つ目のfloatを0にしておきます。

(この数字についてはよくわかりませんが、通常世界が0、ネザーが0.1、エンドが0になっているので0にしておきます。)

メソッドは上から順に

  • チャンクジェネレータ(後ほど作ります)
  • スポーン地点(リスポーンできないようにするので、今回はnull)
  • CelestialAngle(これはまじでわからない。太陽と月の角度らしいけど、今回は他からコピペします)
  • 地上の世界かどうか(今回はtrue)
  • 霧の色(今回は通常世界と同じ)
  • リスポーンできるかどうか(今回はfalse)
  • 霧の有無(ネザーのみtrueです。今回はfalse)

を設定できます。

コードはこんな感じ。

package com.umagame.dirtmod.world.dimension;

import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import net.minecraft.world.dimension.Dimension;
import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.ChunkGenerator;

public class DimensionDirt extends Dimension{

    public DimensionDirt(World p_i225788_1_, DimensionType p_i225788_2_) {
        super(p_i225788_1_, p_i225788_2_,0.0F);
    }

    @Override
    public ChunkGenerator<?> createChunkGenerator() {
        return new DirtChunkGenerator(world, new DirtBiomeProvider(), new DirtGenSettings()); //後で追加
    }

    @Override
    public BlockPos findSpawn(ChunkPos chunkPosIn, boolean checkValid) {
        return null;
    }

    @Override
    public BlockPos findSpawn(int posX, int posZ, boolean checkValid) {
        return null;
    }

    @Override
    public float calculateCelestialAngle(long worldTime, float partialTicks) {
        double d0 = MathHelper.frac((double)worldTime / 24000.0D - 0.25D);
          double d1 = 0.5D - Math.cos(d0 * Math.PI) / 2.0D;
          return (float)(d0 * 2.0D + d1) / 3.0F;
    }

    @Override
    public boolean isSurfaceWorld() {
        return true;
    }

    @Override
    public Vec3d getFogColor(float celestialAngle, float partialTicks) {
        float f = MathHelper.cos(celestialAngle * ((float)Math.PI * 2F)) * 2.0F + 0.5F;
          f = MathHelper.clamp(f, 0.0F, 1.0F);
          float f1 = 0.7529412F;
          float f2 = 0.84705883F;
          float f3 = 1.0F;
          f1 = f1 * (f * 0.94F + 0.06F);
          f2 = f2 * (f * 0.94F + 0.06F);
          f3 = f3 * (f * 0.91F + 0.09F);
          return new Vec3d((double)f1, (double)f2, (double)f3);
    }

    @Override
    public boolean canRespawnHere() {
        return false;
    }

    @Override
    public boolean doesXZShowFog(int x, int z) {
        return false;
    }

}

とりあえずこれでディメンション自体のクラスはOKです。

GenSettingsのクラス

生成の設定のクラスをworld/dimensionに作ります。

f:id:Umagame:20200329000346p:plain

このクラスではディメンションの生成の設定をできます。

設定は色々ありますが、とりあえず今回は通常世界でいう石ブロックを圧縮された土ブロックに変えておきます。

詳しくはGenerationSettingsクラスを見てください。

package com.umagame.dirtmod.world.dimension;

import com.umagame.dirtmod.init.DirtModBlocks;

import net.minecraft.block.BlockState;
import net.minecraft.world.gen.GenerationSettings;

public class DirtGenSettings extends GenerationSettings{
    @Override
    public BlockState getDefaultBlock() {
          return DirtModBlocks.SUPER_COMPRESSED_DIRT.getDefaultState();
    }
}

チャンクジェネレータのクラス

チャンクジェネレータのクラスをworld/dimensionに作ります。

f:id:Umagame:20200328235747p:plain

コードは超難解なので他からコピペします。

package com.umagame.dirtmod.world.dimension;

import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.IWorld;
import net.minecraft.world.WorldType;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.provider.BiomeProvider;
import net.minecraft.world.gen.NoiseChunkGenerator;
import net.minecraft.world.gen.OctavesNoiseGenerator;

public class DirtChunkGenerator extends NoiseChunkGenerator<DirtGenSettings>{
    
    private static final float[] field_222576_h = Util.make(new float[25], (p_222575_0_) -> {
        for (int i = -2; i <= 2; ++i) {
            for (int j = -2; j <= 2; ++j) {
                float f = 10.0F / MathHelper.sqrt((float) (i * i + j * j) + 0.2F);
                p_222575_0_[i + 2 + (j + 2) * 5] = f;
            }
        }

    });

    private final OctavesNoiseGenerator depthNoise;
    private final boolean isAmplified;
    
    public DirtChunkGenerator(IWorld worldIn, BiomeProvider provider, DirtGenSettings settingsIn) {
        super(worldIn, provider, 4, 8, 256, settingsIn, true);
        this.randomSeed.skip(2620);
        this.depthNoise = new OctavesNoiseGenerator(this.randomSeed, 15, 0);
        this.isAmplified = worldIn.getWorldInfo().getGenerator() == WorldType.AMPLIFIED;
    }

    @Override
    protected double[] func_222549_a(int p_222549_1_, int p_222549_2_) {
        double[] adouble = new double[2];
        float f = 0.0F;
        float f1 = 0.0F;
        float f2 = 0.0F;
        int j = this.getSeaLevel();
        float f3 = this.biomeProvider.func_225526_b_(p_222549_1_, j, p_222549_2_).getDepth();

        for (int k = -2; k <= 2; ++k) {
            for (int l = -2; l <= 2; ++l) {
                Biome biome = this.biomeProvider.func_225526_b_(p_222549_1_ + k, j, p_222549_2_ + l);
                float f4 = biome.getDepth();
                float f5 = biome.getScale();
                if (this.isAmplified && f4 > 0.0F) {
                    f4 = 1.0F + f4 * 2.0F;
                    f5 = 1.0F + f5 * 4.0F;
                }

                float f6 = field_222576_h[k + 2 + (l + 2) * 5] / (f4 + 2.0F);
                if (biome.getDepth() > f3) {
                    f6 /= 2.0F;
                }

                f += f5 * f6;
                f1 += f4 * f6;
                f2 += f6;
            }
        }

        f = f / f2;
        f1 = f1 / f2;
        f = f * 0.9F + 0.1F;
        f1 = (f1 * 4.0F - 1.0F) / 8.0F;
        adouble[0] = (double) f1 + this.getNoiseDepthAt(p_222549_1_, p_222549_2_);
        adouble[1] = (double) f;
        return adouble;
    }

    @Override
    protected double func_222545_a(double p_222545_1_, double p_222545_3_, int p_222545_5_) {
        double d1 = ((double) p_222545_5_ - (8.5D + p_222545_1_ * 8.5D / 8.0D * 4.0D)) * 12.0D * 128.0D / 256.0D
                / p_222545_3_;
        if (d1 < 0.0D) {
            d1 *= 4.0D;
        }

        return d1;
    }

    @Override
    protected void func_222548_a(double[] p_222548_1_, int p_222548_2_, int p_222548_3_) {
        this.func_222546_a(p_222548_1_, p_222548_2_, p_222548_3_, (double) 684.412F, (double) 684.412F, 8.555149841308594D,
                4.277574920654297D, 3, -10);
    }
    
    private double getNoiseDepthAt(int noiseX, int noiseZ) {
        double d0 = this.depthNoise.func_215462_a((double) (noiseX * 200), 10.0D, (double) (noiseZ * 200), 1.0D, 0.0D, true)
                * 65535.0D / 8000.0D;
        if (d0 < 0.0D) {
            d0 = -d0 * 0.3D;
        }

        d0 = d0 * 3.0D - 2.0D;
        if (d0 < 0.0D) {
            d0 = d0 / 28.0D;
        } else {
            if (d0 > 1.0D) {
                d0 = 1.0D;
            }

            d0 = d0 / 40.0D;
        }

        return d0;
    }

    @Override
    public int getGroundHeight() {
        return 64;
    }
    @Override
    public int getSeaLevel() {
        return 63;
    }
}

一番下のgetGroundHeightとgetSeaLevelで地面と海の高さを設定できます。

バイオームプロバイダのクラス

バイオームプロバイダのクラスをworld/dimensionに作ります。

f:id:Umagame:20200329001927p:plain

このクラスで、ディメンション内のバイオームを指定します。

(今回は一つだけですが、biomeListに複数入れたらディメンションに複数のバイオームが出るようになると思います。多分。)

package com.umagame.dirtmod.world.dimension; import java.util.Set; import com.google.common.collect.ImmutableSet; import com.umagame.dirtmod.init.DirtModBiomes; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.provider.BiomeProvider; public class DirtBiomeProvider extends BiomeProvider{ private static final Set<Biome> biomeList = ImmutableSet.of(DirtModBiomes.DIRT); protected DirtBiomeProvider() { super(biomeList); } @Override public Biome func_225526_b_(int p_225526_1_, int p_225526_2_, int p_225526_3_) { return DirtModBiomes.DIRT; } }

ModDimensionのクラス

最後に、登録をするときに使うModDimensionのクラスを作ります。

f:id:Umagame:20200329002433p:plain

ModDimensionを継承して、メソッドの戻り値をディメンションのクラスにします。

コンストラクタにsetRegistryNameを追加して、IDも設定しておきます。

package com.umagame.dirtmod.world.dimension;

import java.util.function.BiFunction;

import net.minecraft.world.World;
import net.minecraft.world.dimension.Dimension;
import net.minecraft.world.dimension.DimensionType;
import net.minecraftforge.common.ModDimension;

public class DirtModDimension extends ModDimension{
    public DirtModDimension() {
        this.setRegistryName("dirt");
    }
    @Override
    public BiFunction<World, DimensionType, ? extends Dimension> getFactory() {
        return DimensionDirt::new;
    }
}

ディメンションの登録

initに登録用クラスを作ります。

f:id:Umagame:20200329002820p:plain

アイテムなどとは少し違った感じです。

package com.umagame.dirtmod.init;

import com.umagame.dirtmod.main.DirtMod;
import com.umagame.dirtmod.world.dimension.DirtModDimension;

import net.minecraftforge.common.ModDimension;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
import net.minecraftforge.registries.ObjectHolder;

@ObjectHolder(DirtMod.MOD_ID)
@EventBusSubscriber(modid = DirtMod.MOD_ID, bus = Bus.MOD)
public class DirtModDimensions {
    public static final ModDimension DIRT_DIMENSION = new DirtModDimension();

    @SubscribeEvent
    public static void onDimensionRegistryEvent(RegistryEvent.Register<ModDimension> event) {
        event.getRegistry().register(new DirtModDimension());
    }
}

ディメンションの登録はこれだけではだめで、もう一つクラスが必要です。

これから使うかもしれないのでmainに作ります。

f:id:Umagame:20200329003600p:plain

正直名前はなんでもいいです。

DIMENSION_TYPE_RLのところにディメンションのIDを入力する必要があるので、忘れないように。

package com.umagame.dirtmod.main;

import com.umagame.dirtmod.init.DirtModDimensions;

import net.minecraft.util.ResourceLocation;
import net.minecraft.world.dimension.DimensionType;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.event.world.RegisterDimensionsEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;

@EventBusSubscriber(modid = DirtMod.MOD_ID, bus=Bus.FORGE)
public class CommonForgeEventHandler {

  public static final ResourceLocation DIMENSION_TYPE_RL = new ResourceLocation(DirtMod.MOD_ID, "dirt");

    @SubscribeEvent
    public static void onRegisterDimensionsEvent(RegisterDimensionsEvent event) {
        if (DimensionType.byName(DIMENSION_TYPE_RL) == null){
            DimensionManager.registerDimension(DIMENSION_TYPE_RL, DirtModDimensions.DIRT_DIMENSION, null, true);
        }
    }
}

これでディメンションの追加は完了です。

起動して確認しましょう。

「/forge setdimension @p ディメンションID」でディメンションに移動できます。

f:id:Umagame:20200329010013p:plain

石の部分もちゃんと変わっています。

f:id:Umagame:20200329010024p:plain

 さいごに

今回はここまでです。

今回は書いてる途中に結構バグが出たので、もしかしたらコードに誤りがあるかもしれません。

ディメンションはバイオームと同様に設定が多いので、今回紹介できなかった設定は結構あります。

ではでは。

次回:

umagame.hatenablog.jp

【マインクラフト】ModPack(モッドパック)の導入方法 2020年版

【注意】この記事で紹介した方法は現在では使えません。最新版の方法についての記事はこちら:

www.umagame.info

 

どうも。

今回はマインクラフトのModPackを導入する方法を紹介します。

Twitchの準備

マインクラフトのModPackは、Twitchのデスクトップアプリを入れることでプレイできます。

https://www.twitch.tv/downloads(Twitchのダウンロード)

f:id:Umagame:20200324123734p:plain

自分のPCに合ったものを選んで、ダウンロードしてください。

インストールを終えて起動すると、ログインするよう言われます。

なのでTwitchアカウントを持っていない方は作りましょう。(ちなみに、設定した年齢が低すぎるとアカウントが作れないようになっています。)

ModPackをインストール

ログインしたら、アプリ上にほうの「MOD」をクリック。

f:id:Umagame:20200324123834p:plain

Minecraftをクリック。(PCにインストールされていないと出ません)

f:id:Umagame:20200324123918p:plain

「Modパックを探す」をクリック。

f:id:Umagame:20200324124047p:plain

ここで好きなModPackを検索して、インストールすることができます。

f:id:Umagame:20200324124154p:plain

インストールが終わると、「マイModパック」のところにインストールしたModPackが表示されますのでそこからプレイできます。

「プレイ」を押すと、マインクラフトのランチャーが起動されます。

f:id:Umagame:20200324124418p:plain

おすすめModPack

これで終わるとちょっと短いので少しだけおすすめのModPackを紹介します。

SkyBlock

「Modパックを探す」のところで「すべて」を「SkyBlock」にすると、SkyBlockのModPackが見れます。

SkyBlockの利点は、なんといっても軽いというところです。

ModPackはModをたくさんいれるのでその分処理が重くなりますが、マップの処理が軽く済むSkyBlockなら重くなりません。

具体的にいうと、GregBlockやSkyFactory4とかがおすすめです。

GregBlockは、作業の自動化に特化した感じのSkyBlockです。

名前の通りGregTechが入っているので、バニラのレシピが変えられまくっていて難易度高めです。

(↓ちょっと前からやってます。面白いです。)

f:id:Umagame:20200328133025p:plain

SkyFactory4はダウンロード数が一番多いので多分面白いです。(ちょっとしかやったことない)

その他

その他でいうと、Regrowthは比較的軽めなのでおすすめです。

PCのスペックが良ければどれを選んでも快適にプレイできますが、やっぱり低スペックだと結構きついです。

(StoneBlockというマップをやったときは、i7 8750H、GTX1050Ti、メモリ8GBで超カクカクでした。参考までに。)

さいごに

ModPackはスペックが低いかたにはおすすめしません。

普通にModを何個かいれてサバイバルするほうがいいと思います。

ではでは。

【マインクラフト Modding】1.15対応 自作MODの作り方 #11 コマンド

このシリーズのまとめはこちら:

umagame.hatenablog.jp

どうも。

はじめに

今回はコマンドの追加をやります。

進捗とか作物ブロックの追加を一緒にこの記事で説明しようと思っていたのですが、時間かかりそうだったのでやめました。

なのでこの記事は短めです。

前回:

umagame.hatenablog.jp

コマンドの追加

コマンドのクラス

まずはコマンドのクラスをcommand/implに作ります。

f:id:Umagame:20200325215410p:plain

今回は/dirtmodと入力すると、Modの詳細がチャットに出るようにしたいと思います。

package com.umagame.dirtmod.command.impl;

import com.mojang.brigadier.CommandDispatcher;

import net.minecraft.command.CommandSource;
import net.minecraft.command.Commands;
import net.minecraft.util.text.TranslationTextComponent;

public class CommandDirtMod {
    public static void register(CommandDispatcher<CommandSource> dispatcher) {
        dispatcher.register(Commands.literal("dirtmod").executes(source -> {
            source.getSource().sendFeedback(new TranslationTextComponent("command.dirtmod"), true);
            return 1;
        }));
    }
}

今回は、以前の記事と同じようにTranslationTextComponentを使って、言語によってテキストが変わるようにします。

"dirtmod"のところがコマンドになります。

コマンドのクラスはこれでOKです。

コマンドの登録

アイテムやブロックと同じように、コマンドもゲームに登録する必要があります。

登録用のクラスをinitに作ります。

f:id:Umagame:20200325220826p:plain

以前と同じようにSubscribeEventで登録します。

package com.umagame.dirtmod.init; 

import com.umagame.dirtmod.command.impl.CommandDirtMod; 
import com.umagame.dirtmod.main.DirtMod; 
import net.minecraftforge.eventbus.api.SubscribeEvent; 
import net.minecraftforge.fml.common.Mod; 
import net.minecraftforge.fml.event.server.FMLServerStartingEvent; 

@Mod.EventBusSubscriber(modid = DirtMod.MOD_ID) 
public class DirtModCommands { 
    @SubscribeEvent 
    public static void onServerStarting(final FMLServerStartingEvent event) { 
        CommandDirtMod.register(event.getCommandDispatcher());
    } 
}

langファイル

TranslationTextComponentを使っているので、langファイルをいじります。

ja_jpに

"command.dirtmod": "DirtMod バージョン1.0"

en_usに

"command.dirtmod": "DirtMod Version1.0"

と追加します。(細かい詳細を書こうとしたのですが、はめんどくさかったのでやめました。)

とりあえずこれで完成です。

f:id:Umagame:20200325221544p:plain

f:id:Umagame:20200325221555p:plain

source ->のあとの{}の中が、コマンドの内容なのでここをいじれば好きなようにコマンドを作れます。

さいごに

今回はここまでです。

次回はディメンションかも。

【マインクラフト Modding】1.15 自作MODの作り方まとめ

<マインクラフト1.16.4での自作Mod解説を始めました!興味がある方は最新記事を御覧ください!>

マインクラフト1.15Modding解説がパート10までいったということで、とりあえず今までの記事のまとめみたいなのを作っておきます。

このページからすべてのパートに飛べる感じです。

f:id:Umagame:20200326170940p:plain

サムネ用

1.15対応 自作MODの作り方

DirtModという誰得Modを作りながら、Modの作り方を解説しています。

(ブログの編集モードの関係で、目次とかソースコードの部分がおかしくなっている場合があります。)

#1 環境構築

umagame.hatenablog.jp

EclipseJDK、Forgeを入れた。

#2 準備

umagame.hatenablog.jp

Javaのパスを通して、Eclipseの準備をした。

#3 Modの説明欄

umagame.hatenablog.jp

ようやくModを作り始めるかと思ったら説明を書いただけ。

今思えば1、2、3は一つにまとめても良かったかも。(まあ2と3の間に休止期間あったのでしょうがない)

#4 アイテム・クリエイティブタブ

umagame.hatenablog.jp

圧縮された土、DirtModタブを作った。(この記事のコードは結構適当なので修正の記事をだすつもり)

#5 ブロック・レシピ

umagame.hatenablog.jp

圧縮された土ブロックと、そのレシピを追加した。

この記事も結構適当です。(実際ミスがありました)

#6 ツール

umagame.hatenablog.jp

圧縮された土のツールを追加した。

#7 防具

umagame.hatenablog.jp

圧縮された土の防具を作った。

#8 特殊アイテム・エクスポート

umagame.hatenablog.jp

土を粉にして食べれるようにして、jar形式でのエクスポートもした。

#9 鉱石の生成

umagame.hatenablog.jp

土クリスタル鉱石のブロックとアイテムを追加して、生成の設定をした。

#10 バイオーム

umagame.hatenablog.jp

バイオームを作った。

#11 コマンド

umagame.hatenablog.jp

Modの説明を表示するコマンドをつくった。

#12 ディメンション

土バイオームを使って、土ディメンションを作った。

umagame.hatenablog.jp

#13 液体

泥を追加した。

umagame.hatenablog.jp

予定

今解説記事を作ろうかなと思っているやつのリストです。更新頻度は気まぐれ。

  • 作物
  • 進捗
  • Mob

1.15対応 自作MODの作り方 番外編

#1 アイテムティア・アーマーマテリアルの修正

ツールの作成に使うアイテムティアと、防具の作成に使うアーマーマテリアルのクラスの修正です。

umagame.hatenablog.jp

【マインクラフト Modding】1.15対応 自作MODの作り方 #10 バイオーム

このシリーズのまとめはこちら:

umagame.hatenablog.jp

どうも。ついにパート10まで行きました。

はじめに

今回はバイオームを作ります。

言わずもがな土バイオームです。

前回:

umagame.hatenablog.jp

バイオームを作る

バイオームのクラス

バイオームのクラスをworld/biomeに作ります。

f:id:Umagame:20200322115046p:plain

バニラの草原バイオームを参考にコードを書きます。

package com.umagame.dirtmod.world.biome;

import net.minecraft.block.Blocks;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.DefaultBiomeFeatures;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.IFeatureConfig;
import net.minecraft.world.gen.feature.structure.MineshaftConfig;
import net.minecraft.world.gen.feature.structure.MineshaftStructure;
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder;
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilderConfig;

public class BiomeDirt extends Biome{
    public BiomeDirt() {
        super((new Biome.Builder()).surfaceBuilder(SurfaceBuilder.DEFAULT,
                new SurfaceBuilderConfig(Blocks.COARSE_DIRT.getDefaultState(),
                        Blocks.DIRT.getDefaultState(),
                        Blocks.GRAVEL.getDefaultState()))
                .precipitation(Biome.RainType.RAIN).category(Biome.Category.PLAINS)
                .depth(0.125F).scale(0.05F).temperature(0.8F).downfall(0.4F)
                .waterColor(8666880).waterFogColor(8666880).parent((String)null));
        this.func_226711_a_(Feature.MINESHAFT.func_225566_b_(new MineshaftConfig(0.004D, MineshaftStructure.Type.NORMAL)));
        this.func_226711_a_(Feature.STRONGHOLD.func_225566_b_(IFeatureConfig.NO_FEATURE_CONFIG));
        DefaultBiomeFeatures.addCarvers(this);
        DefaultBiomeFeatures.addLakes(this);
        DefaultBiomeFeatures.addMonsterRooms(this);
        DefaultBiomeFeatures.addStoneVariants(this);
        DefaultBiomeFeatures.addOres(this);
        DefaultBiomeFeatures.addSedimentDisks(this);
        this.addSpawn(EntityClassification.CREATURE, new Biome.SpawnListEntry(EntityType.SHEEP, 12, 4, 4));
        this.addSpawn(EntityClassification.CREATURE, new Biome.SpawnListEntry(EntityType.PIG, 10, 4, 4));
        this.addSpawn(EntityClassification.CREATURE, new Biome.SpawnListEntry(EntityType.CHICKEN, 10, 4, 4));
        this.addSpawn(EntityClassification.CREATURE, new Biome.SpawnListEntry(EntityType.COW, 8, 4, 4));
        this.addSpawn(EntityClassification.AMBIENT, new Biome.SpawnListEntry(EntityType.BAT, 10, 8, 8));
        this.addSpawn(EntityClassification.MONSTER, new Biome.SpawnListEntry(EntityType.SPIDER, 100, 4, 4));
        this.addSpawn(EntityClassification.MONSTER, new Biome.SpawnListEntry(EntityType.ZOMBIE, 95, 4, 4));
        this.addSpawn(EntityClassification.MONSTER, new Biome.SpawnListEntry(EntityType.ZOMBIE_VILLAGER, 5, 1, 1));
        this.addSpawn(EntityClassification.MONSTER, new Biome.SpawnListEntry(EntityType.SKELETON, 100, 4, 4));
        this.addSpawn(EntityClassification.MONSTER, new Biome.SpawnListEntry(EntityType.CREEPER, 100, 4, 4));
        this.addSpawn(EntityClassification.MONSTER, new Biome.SpawnListEntry(EntityType.SLIME, 100, 4, 4));
        this.addSpawn(EntityClassification.MONSTER, new Biome.SpawnListEntry(EntityType.ENDERMAN, 10, 1, 4));
        this.addSpawn(EntityClassification.MONSTER, new Biome.SpawnListEntry(EntityType.WITCH, 5, 1, 1));
    }
}

少し説明すると、

上の方のnew SurfaceBuilderConfigのところでバイオームのブロックを設定できます。

今回は地表が荒れた土、その下が普通の土、海底のブロックを砂利にしています。(バニラのバイオームでも同じようなやつがあった気がする)

あと、それのもう少し下のwaterColor、waterFogColorで水と水に入ったときのフォグの色を設定しています。(今回は茶色にしています)

この数字についてはこちらのサイトで確認することができます。

https://www.mathsisfun.com/hexadecimal-decimal-colors.html(MathIsFun)

f:id:Umagame:20200322115751p:plain

画像バグってるけど気にしない

Decimalのとこの数字を使いましょう。
あと、廃坑や遺跡、スポナーも出るようにしています。

バイオームの登録

バイオーム登録用のクラスをinitパッケージに作ります。

f:id:Umagame:20200322120051p:plain

 例によりコードは丸パクリです。

package com.umagame.dirtmod.init;

import com.umagame.dirtmod.main.DirtMod;
import com.umagame.dirtmod.world.biome.BiomeDirt;

import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.BiomeManager;
import net.minecraftforge.common.BiomeManager.BiomeEntry;
import net.minecraftforge.common.BiomeManager.BiomeType;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
import net.minecraftforge.registries.ObjectHolder;

@ObjectHolder(DirtMod.MOD_ID)
public class DirtModBiomes {
public static final BiomeDirt DIRT = null;

    @Mod.EventBusSubscriber(modid = DirtMod.MOD_ID, bus = Bus.MOD)
    public static class Register {

        @SubscribeEvent
        public static void registerBiomes(final RegistryEvent.Register<Biome> event) {
            final Biome[] biomes = {
                new BiomeDirt().setRegistryName(DirtMod.MOD_ID, "dirt")
            };

            event.getRegistry().registerAll(biomes);
        }
    }

    public static void addBiomes() {
        BiomeManager.addBiome(BiomeType.WARM, new BiomeEntry(DIRT, 10));
        BiomeManager.addSpawnBiome(DIRT);
    }
}

これも少し説明すると、

真ん中の"dirt"がバイオームIDです。

で、下の方のaddBiomeの左がバイオームのタイプで、右の数字はバイオームのでやすさです。(草原とかは10)

バイオームは設定が多いのでここですべて紹介することはできませんが、大体の設定はこれでOKです。

あと、langファイルでバイオームの名前も設定しておきます。

この一行を追加。

"biome.dirtmod.dirt": ""

これで起動して確認してみます。

いつのアプデか知りませんが、ビュッフェというワールドタイプが使えそうなのでこれを使ってみます。

f:id:Umagame:20200322122024p:plain

「土」って書いてあるのなんか面白いですね。

f:id:Umagame:20200322122322p:plain

ちゃんとブロックと水の色が適応されています。

f:id:Umagame:20200322152418p:plain

さいごに

今回はここまでです。

前回の記事のときにいいましたが、鉱石の生成にバイオームを指定できるのでやってみてはいかがでしょうか。

次回:

umagame.hatenablog.jp