HaLake Magazine

コワーキングスペースHaLakeの技術情報発信サイト!IoT,AR,VRなど最新技術情報をお届け!

【Minecraft】spigotサーバ + scriptcraftプラグイン でJava Scriptを学ぶ準備をしよう!初心者 入門

f:id:mischief_cat:20200412105526p:plain 今回は、Mincraftサーバを立てる!scriptcraftプラグインを導入する!Java Script(以下JS)で拡張機能を作る!こんな感じで進めていきたいと思います。
しかし実際の所、Modではなくscriptcraftの機能内で拡張機能を作るので、ブロックを追加したりアイテムを追加したりetc...は今回使うもので自分が把握している範囲では無理だということ。
(拡張機能という表記があっているかは不明ですが...) 追加する機能には限りがあり、拡張機能を作りながらJSを学べると思っていただきたい。
今回作る拡張機能は簡単な建造物を作ったりゾンビを数体ポンッとスポーンさせたり、敵に見つかったらアラートしてくれたりを作っていきます。
かくゆう私もJSは全く触ったことがないのにできるので小学生でもできると思います。

前提条件

  • Minecraft(JE)を持っている
  • PC一台で済ませたい方はある程度の性能がないと厳しいのでブラウザなどはあまり開かずにメモリを十分に開けておくこと。
  • java jdk バージョン8以上がインストールされている

環境

目次

  1. spigotサーバを立てる
  2. scriptcraftプラグインの導入
  3. JSで拡張機能を追加
  4. まとめ

spigotサーバを立てる

今回は不具合も少なく安定したMinecraft ver1.12.2で環境を整えていきたいと思います。
この後説明するやり方を少し書き換えるだけで上のバージョンの環境を整えることはできますがscriptcraftの方がバージョンが上がるにつれて不具合が多くなっているので今回は1.12.2で進めていきます。
まずは下記URLからSpigot-1.12.2.jarをダウンロードします。
getbukkit.org f:id:mischief_cat:20200411124611p:plain

ダウンロードしたものを好きな場所にファイルを作って保存しておきます。
私は今回デスクトップにspigot-1.12.2とファイルを作ってそこに先ほどダウンロードしたspigot-1.12.2.jarを置きました。 PCに慣れていない方は私と同じ書いている通りにやってもらえれば問題なく動作するので真似してみてください。
次にコマンドプロンプトを開いてコマンドを打っていきます。
コマンドプロンプトの開き方がわからない方はこちら↓

www.tipsfound.com

開けたら先ほど自分で作ったファイルまでコマンドプロンプトで移動したいのでcdコマンド(ファイルを移動するコマンド)を使っていきます。
私の場合は

cd desktop/spigot-1.12.2

とすると微妙な差ではありますがしっかりとファイルを移動したことがわかります。 f:id:mischief_cat:20200411130350p:plain 指定されたパスが見つかりません。と出たらなにかのスペルが違っている場合があるので見直してみてください。
移動できたら次に

java -jar spigot-1.12.2.jar

と入力し実行するとエラーが出てきます。安心してください!正常ですよ!
f:id:mischief_cat:20200411131312p:plain エクスプローラから先ほどつくっらファイルをのぞいてみると見知らぬものが追加されているのでその中からeula.txtをダブルクリックで開き編集していきます。 f:id:mischief_cat:20200412111016p:plain

  • 注意:下の操作を行う前に必ずこちらのURL↓の内容を各自確認したうえでライセンス確認に同意した人のみ行ってください。
    こちらのURLはeula.txtに書かれているものと同じになります。 account.mojang.com

画像のようにeula=falseとなっているところをeula=trueに書き換える。
この操作をすることでライセンス確認に同意する意思の有無を確認しているので各自の判断で行ってください。

eula=true同意
eula=false反対

を意味します。
反対を選ぶと今後の実行ができないので反対する方はここからの操作はできないので注意してください。

同意をした方は再度

java -jar spigot-1.12.2.jar

コマンドプロンプトで実行します。
その後少しするとDONEなんちゃら~って出てきます。 f:id:mischief_cat:20200411133126p:plain こうなっていれば成功です。
とりあえずspigotサーバはこれで立ったのでMinecraftからサーバーにアクセスしていきましょう。
サーバを止めたい場合は

stop

と打つと止まりますが、コマンドプロンプトはこのままにしておいてください。この状態ですでにサーバが立っている状態になっています。

  • 注意:今後コマンドを実行するときゲーム内で実行する場合は最初に/(スラッシュ)を入れてください。
    サーバ起動中のサーバ側のコマンドプロンプトでコマンドを実行する場合は最初の/(スラッシュ)はなくても大丈夫です。

Minecraft luncherを起動して以下の操作を行います。
f:id:mischief_cat:20200411134345p:plainf:id:mischief_cat:20200411134348p:plainf:id:mischief_cat:20200411134411p:plain

赤で塗りつぶされた場所は無視してください。
画像の手順でマインクラフトを起動していきます。
spigotサーバとマインクラフトのバージョンを合わせなといけないのでどちらとも1.12.2で起動させていきます。
f:id:mischief_cat:20200411141047p:plainf:id:mischief_cat:20200411141052p:plainf:id:mischief_cat:20200411141106p:plain サーバを起動しているPCで接続するならサーバアドレスを

localhost

と入力してください。
同じネットワーク内のべつPCからの接続はサーバ側PCのIPアドレスを調べる必要があるます。以下を参考に調べてサーバアドレスに入力し接続してください。
f:id:mischief_cat:20200411141108p:plain ゲーム画面が出たら無事接続されたことになります。

scriptcraftプラグインの導入

プラグインの導入をしていきます。
まずは下記URLからscriptcraft.jarをダウンロードします。

github.com

f:id:mischief_cat:20200411143127p:plain

ダウンロードしたものを前章で作ったファイルの中にあるpuluginsファイルに保存します。パスはこんな感じ

Desktop/spigot-1.12.2/plugins/scriptcraft.jar

となれば良い。
そうしたらコマンドプロンプトに戻ってサーバが起動したままなら前章で説明したようにstopと打ち実行しサーバを停止させた後にもう一度起動させるために

java -jar spigot-1.12.2.jar

を実行することでもう一度サーバを起動させます。 今後サーバを起動させたい時は今作業しているファイルに移動してきて上記のコマンドを実行することで起動できます。
コマンドプロンプトにログが流れてくるのでDONEと出てきたら成功です。 その後、前章で説明したようにもう一度マインクラフトからサーバに接続します。 このままだとオペレータ権限がないのでゲーム内でコマンドを使えません。サーバ側から権限を付与してあげる必要があるので次のコマンドを実行します。サーバのプロンプトで

op ユーザ名

ユーザ名を自分のマインクラフトのユーザ名に書き換えて実行するとマインクラフト内でログが出現しオペレータの権限が付与された的なのがと出てくれば成功です。
試しにすでにJSで書かれたものが用意されていてコマンドからそれを呼び出して使ってみましょう。コマンドはゲーム内から

/js castle()

と入力します。勘のいいひとは気づいているかもですが、城が出てきます。

こんな感じ f:id:mischief_cat:20200411145241p:plain これができれば導入はカンペキです。
ちなみにこの城を作るためのJSファイルがあるのでよかったら見てみてください。

Desktop/spigot-1.12.2/scriptcraft/plugins/drone/contrib/castle.js

にあります。ほかにも使えるコマンドがあるので同じファイル内にあるJSファイルをのぞいて実行してみるのも面白いです。
使えるコマンドを一覧で見たい方はこちらをどうぞ↓

github.com

JSで拡張機能の追加

やっとJSを使う場面がやってきました。
あくまで例なので細かい説明は省きます。(自分が理解してないだけ)
先ほどと同じサイトですが、こことサンプルで用意されているプログラムを参考に書いているのでまねして書いてみると案外書けちゃいます。

指定したブロックと大きさで空洞の建物を作る

'use strict';
/*global require*/
var Drone = require('drone'),
  blocks = require('blocks');
function tower(towerBlock, oneSide, height) {
  this.chkpt('tower');
  this.box0(blocks[towerBlock],oneSide,height,oneSide)
  this.move('tower');
}
Drone.extend(tower);

前章が私と同じやり方であればこれを適当な名前でJSファイルとして

Desktop/spigot-1.12.2/scriptcraft/plugins

の中に保存してください。
その後サーバを前章のやり方で起動しなおすか、すでに起動させている状態ならゲーム内で(サーバ側からの時は/を消す)

/js refresh()

と打つとscriptcraftだけをリロードしてくれるので更新したファイルがある場合はこれをするだけで読み込んでくれるのでデバッグしやすくなっています。

  • 注意:ファイルを追加または編集後は必ずサーバを再起動か上記のやり方でリロードしてください。

先ほどのプログラムを実行したいときはゲーム内で

/js tower('oak',5,10)

第一引数にブロックの名前、第二に正四角形の一辺の長さ、第三に高さを入力するとその通りにポンッとでてきます。
oakstoneにすると石で作られます。

ゾンビを大量にスポーンさせる

'use strict';
/*global require*/
var entities = require('entities');
var spawn = require('spawn');
var utils = require('utils');
exports.zombie_panic = function() {
  var location = utils.getPlayerPos(); /*var location = utils.player().location;でも可*/
  var name = 'ZOMBIE';
    for(var i = 0;i < 10; i++){
      spawn(name, location);
    }
}

先ほどと同じように保存しリロード

/js zombie_panic()

を実行で出てくると思います。
プログラムのZOMBIEの場所を書き換えて他をスポーンさせるのも面白そうですね。必ず大文字で入力してください。
またfor分の中の10の場所を好きな数字にすれば好きな数をスポーンさせられます。リロードしてね!
関数の名前を変えたいときはプログラム内のzombie_panic(ネーミングセンス皆無)を書き換えると好きな名前で呼び出せます。

敵に見つかった時にアラート

var utils = require('utils');
var sounds = require('sounds');
function alert(event){
    if(event.target == "CraftPlayer{name=" + utils.playerNames() + "}"){
        echo(event.target,event.entity.name);
        sounds.blockAnvilPlace(event.target.location,1,4)
    }
}
events.entityTarget( alert );

こちらも同じように保存しリロード
このプログラムはコマンドから実行しなくてもエンティティからターゲットされると自動でプログラムが実行されるので先ほどのプログラムでゾンビをスポーンさせるとターゲットされて音とメッセージで伝えてくれます。音は金床を置いた時の音を代用して音量1でピッチを4にして発生させています。どちらも0~4の五段階で設定できます。

まとめ

JS自体の細かい説明は省きましたが題名にもある通り、勉強ができる環境を準備するのが目的なので自分で学習したり試行錯誤することを学んでいただきたいく思います。
上のバージョンで試してもいいと思いますが、今現在では不具合が多いのでお勧めはしません。
試したい方はダウンロードするもののバージョンをマインクラフトのバージョンと合わせてダウンロード&インストールしてもらえればできると思います。