nuxtjsのVueRouterのpushで、params[]=foo¶ms[]=bar みたいなことをしたかった
環境はnuxtjs2.x。Nodejsは10.x。
this.$router.push('foobar', { query: { params: ['foo', 'bar'] } })
みたいなので、通常だと http://xxxxxx?params=foo¶ms=bar
というようなURLになる。
どうも、調べてみると queryString
を使用して
parseQuery: function(query) { return queryString.parse(query, { arrayFormat: 'bracket' }) }, stringifyQuery: function(params) { if (0 === Object.keys(params).length) { return '' } else { return ( '?' + queryString.stringify(params, { arrayFormat: 'bracket' }) ) } }
このように書けばいいよというのを見つけた。
NodeJS 標準の queryString
には arrayFormat
ってつけるところないじゃないのん ρ(・ω・、)
そこで、query-string
というライブラリを使用したらいいことが分かった。
nuxt.config.js に以下を追加する。
parseQuery
と stringifyQuery
の中で require
しているのは、nuxt.config.js の最初(module.exports の外)に書いても、parseQuery
などの中では queryString is not defined
のエラーが出るから。
router: { parseQuery: function(query) { const queryString = require('query-string') return queryString.parse(query, { arrayFormat: 'bracket' }) }, stringifyQuery: function(params) { const queryString = require('query-string') if (0 === Object.keys(params).length) { return '' } else { return ( '?' + queryString.stringify(params, { arrayFormat: 'bracket' }) ) } } }
たのしい ( 厂・ω・ )厂うぇーい
Nukkit プラグイン Tips - plugin.yml -
まだ、公式の開発者向けWikiが整備されていないので、plugin.yml
の内容について解説しておく。
公式のサンプルコードをまずは載せる。
#name, main, version and api are required name: ExamplePlugin main: cn.nukkit.exampleplugin.ExamplePlugin #remember version and api is string, don't write it like this: 1.0.0, or there will be an exception version: "1.0.0" api: ["1.0.5"] load: POSTWORLD author: Nukkit Project # Authors and author will be added together in one list. authors: ["Example", "Another"] description: Example plugin showing the API website: https://github.com/NukkitX/ExamplePlugin # These dependencies are required for the plugin to start. #depend: ["OtherPlugin", "ThisPlugin"] # These dependencies are not required. softdepend: ["PluginA", "PluginB"] # Log prefix in console prefix: "Example" # Plugin will be loaded before these. Any cyclic loadbefore's or dependencies's will throw errors! loadbefore: ["ImportantPlugin"] commands: example: description: Example command usage: "/example" aliases: ["xample", "nukkitexample"] permission: exampleplugin.command.example permission-message: "You do not have the required permission to run /example" permissions: exampleplugin.command.example: description: "Allows the user to run the example command" default: true children: # exampleplugin.command.example.test: # description: "Use the test feature in the example command" # default: true
- name (必須)
プラグインの名前(半角英数字、_
、.
、-
、半角スペースが使用できる )
半角スペースだけ(例えばname: " "
)でも大丈夫なのが少し仕様としてもやっとしたりするけど、ちゃんと読み込める。
- main (必須)
メインクラスまでのパス。このパスを使って、ClassLoader
からロードする。なお、cn.nukkit.
から始まるものは使用できない。 - version (必須)
プラグインのバージョン。 - api (必須)
対応するNukkit API のバージョン。どれに対応するかは、version
コマンドで確認できる。
また、1.0.0 というような、「数字 . 数字 . 数字」という形式で書かなければいけない。文字列の配列を記入するが、書かれているAPI バージョンのいずれかが対応していれば、読み込むことができる。 load(初期値:
POSTWORLD
)
プラグインのロードされるタイミングを設定できる。現在、STARTUP
,POSTWORLD
を設定可能。
pekomemo.hatenablog.jpauthor
プラグインの著者。version <plugin name>
や、timings で表示される。authors
と共存可能。- authors
プラグインの著者(author
だと一つだが、authors
だと文字列の配列を記入できるので、複数著者がいるときは便利)。version <plugin name>
や、timings で表示される。author
と共存可能。 - description
プラグインの概要。version <plugin name>
や、timings で表示される。 - website
プラグインのWebサイト。version <plugin name>
や、timings で表示される。 - depend
このプラグインが依存しているプラグイン。依存するプラグインが読み込まれた後で、読み込まれる。(存在しない場合は以下のようなエラー)
01:54:59 [CRITICAL] プラグイン'Sample'を読み込むことができませんでした: 不明な依存関係 01:54:59 [CRITICAL] プラグイン'Sample'を読み込むことができませんでした: 循環依存が検出されました
- softdepend
このプラグインが依存しているプラグイン。depend
と違って、エラーは出ない。 - prefix
コンソールに出力されるログの先頭につく文字を設定できる。標準はプラグインのname
[Sample] onEnable
のSample
の部分。 commands
permissions
- description(必須)
権限の名前 default (デフォルト:
false
) 標準でだれが権限を所有するか。値 権限 op op isop op operator op isoperator op isopadmin op isadmin op !op notop notop notop !operator notop !admin notop notadmin notop true true children
- description(必須)
Nukkit プラグイン Tips - ライフサイクル -
伝統的に、マインクラフトのサーバーMOD向けプラグインには
- onEnable
- onDisable
- onLoad
という、有効・無効・ロードのリスナーを作成できる。
public class SamplePlugin extends PluginBase { @Override public void onEnable() { getLogger().info("onEnable"); } @Override public void onDisable() { getLogger().info("onDisable"); } @Override public void onLoad() { getLogger().info("onLoad"); } }
Nukkitの場合も、ほかのサーバーMODと同じように以下のようなライフサイクルになる(だいぶ適当なフローチャートですまそん)。
また、サーバー起動時の読み込み順に関しては、plugin.yml
の load
(初期では POSTWORLD
)で設定できる。
- STARTUP
起動時にプラグインがロードされる。
- POSTWORLD
ワールドが作成(すでにあるワールドであれば、読み込まれた後)に、プラグインがロードされる。
他にも、 loadbefore
で、このプラグインが特定のプラグインよりも前にロードされるように設定できるほか、 depend
で特定のプラグインの後にロードされるように設定できる。
Nukkit プラグインの作り方 part.2 - 最初のプロジェクト -
Nukkit 公式のサンプルコードも Maven を使用しているので、 Mavenを使ってプラグインを開発、コンパイルする。
Mavenの説明をすると、脱線して、作るのが難しく感じるかもしれないので、省略する。
3. 最初のプロジェクト作成
起動すると上図のような画面が表示される(初期起動時にはIDEのカラーテーマを選択したりしたかも)。
「Create New Project」を選択する。
(Mavenを選択して、「Next」)
(GroupId, ArtifactId, Version を記入する画面が表示され、Versionだけ1.0-SNAPSHOT
が入っている。)
蛇足
GroupId プロジェクトのルートパッケージ
ArchifactId プロジェクト名ちなみに、Nukkitの場合、
groupId = cn.nukkit
artifactId = nukkit
で下図のようなパッケージ構成になっている
プロジェクト名とプロジェクトファイルの場所を設定(基本そのままでいい)したら、「Finish」をクリックする
プロジェクトの作成が完了すると下図のような画面になる。
4. シンプルなプラグインプログラム
A. 依存性追加 pom.xml
このプロジェクトに作成したプログラムから、NukkitのAPIにアクセスするために、pom.xml
に依存性を追加する。
- 現在
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jp.hatenablog.pekomemo.example</groupId> <artifactId>sample</artifactId> <version>1.0-SNAPSHOT</version> </project>
- 修正後
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jp.hatenablog.pekomemo.example</groupId> <artifactId>sample</artifactId> <version>1.0-SNAPSHOT</version> <repositories> <repository> <id>nukkit-repo</id> <url>https://repo.nukkitx.com/snapshot</url> </repository> </repositories> <dependencies> <dependency> <groupId>cn.nukkit</groupId> <artifactId>nukkit</artifactId> <version>1.0-SNAPSHOT</version> <scope>provided</scope> </dependency> </dependencies> </project>
B. ルートパッケージ作成
プロジェクト作成時に groupId
には、ルートパッケージ名を記入する旨を書いた。src / main / java
の配下にパッケージを作成する。
src
から展開していくと、 java
というディレクトが見えるので、右クリックして 「package」 を選択する。
groupId
と同じ名前を記入して、「OK」を選択する。
C. メインクラスの作成
プラグインは、後述の plugin.yml
の内容をもとに、PluginBase
を継承したクラス(この講座では、プラグインの"メインクラス"と呼ぶ)を呼び出す。
plugin.yml
は 「D」 で作成するので、まずはメインクラスを作成しよう。
パッケージ「jp.hatenablog.pekomemo.example」を右クリックして「Java Class」を選択する。
クラス名は、Javaの命名規則にしたがって、適当(適切)なクラス名を記入して「OK」を押す。 クラスを作成すると、内容が表示される。
このクラスは、プラグインのメインクラスなので、PluginBase
を継承する
D. plugin.ymlの作成
NukkitがSpigotなどと同じような挙動であれば、pluginsディレクトに置かれた jarファイルの plugin.yml
の設定をもとに、プラグインを読み込む。と、いうわけでplugin.yml
を作成しよう。
javaディレクトリの下(jp.hatenablog.pekomemo.example と同階層)に resources
というディレクトリが存在する。この中に plugin.yml
を作成する。
plugin.yml
には、name
main
version
api
が必須です。
- name: プラグインの名前
- main: メインクラスまでのパス(今回の場合 jp.hatenablog.pekomemo.example.SamplePlugin
)
- version: プラグインのバージョン
- api: このプラグインがNukkitのどのAPIをサポートするか
なんか、PocketMineに強いインスパイアを感じる。PocketMineと同様に、ここのAPIのバージョンが動作させるNukkitのAPIバージョンよりも大きければ、プラグインのロードエラーがはかれる模様。
今回は、下記のようにした。
name: SamplePlugin main: jp.hatenablog.pekomemo.example.SamplePlugin version: "0.0.1" api: ["1.0.0"]
5. ソースコードのビルド
最低限、プラグインとして必要なファイルを作成したので、いよいよビルドしてプラグインの jar
ファイルを作ろう。
右上のセレクトボックスをクリックして、「Edit Configurations...」 を選択する。
新しいウィンドウが表示されるので、プラス「+」をクリックして、 Maven
を探して、クリックする。
package
と記入して、「OK」を押す。
「OK」を押すと、初期状態だと 「Unnamed」という項目が表示される。
を押すと、ビルドが始まる。
ビルドが終わると、下図のように、「target」ディレクトリが作成され、その中に sample-1.0-SNAPSHOT.jar
というファイルができている。
これを、Nukkit の 「plugins」 にコピーしてサーバを起動すると、読み込まれていることがわかる。
Nukkit プラグインの作り方 part.1 - Java のインストールから、IDEの導入 -
あたま書き
BedrockEditionのカスタムサーバ(ここでは、JEのSpigotとかCuberiteとかいれて、プラグインで拡張したもの)って、運営が大変だと聞く。
というのも、ダウングレードができないらしい。
JEのほうが自由度が高くていいんだけど、人口的にはBEっていうグループに属するプレイヤーのほうが多いと思っていて、JEを遊んでた子とかも、友達とできないからBEを買うなんてのをよく聞く。
プラグインの作り方について、日本語で書かれたものもいくらかあるけど、どこもヤフー知恵袋みたいな内容(Wikipediaの内容のコピペだったり、適当に日本語訳したもの)が多く見受けられる。
公式の説明を日本語訳したもので「作れます!」って人は、そもそも公式ページをGoogle翻訳にかければいいんじゃぁ^ー と思ったりするので、ちょっとかみ砕いて説明をした講座を書いてみる。
使うもの・知識
- Java Version 8
- エディタ IntelliJ IDEA (Jetstorm)
- Nukkit-1.0-SNAPSHOT.jar #65(ずっと 1.0-SNAPSHOTじゃないかーっていうツッコミはしない) NukkitX » Nukkit » master #65 [Jenkins]
- 最低限の知識 Javaプログラムが書ける
- OS Windows10 64bit
1. Java インストール(すでに入れていたら飛ばしてください。)
世間はJavaのライセンス云々でもめていたりするけど、今回は Java8 の環境で開発、動作確認を行う。
まずは、JDKをインストールする。(JREとJDKの違いについては、調べたほうが早い)
(URL: Java SE Development Kit 8 - Downloads )
上記ページには「Java SE Development Kit 8u181」と「Java SE Development Kit 8u181 Demos and Samples 」があるが、「Demos and Samples」はJDKを使ったサンプルが含まれるため、今回の場合必要ではないので「Java SE Development Kit 8u181」をダウンロードする。
ダウンロードするためには、「Accept License Agreement」にチェックを入れないといけないが、ちゃんとライセンスには目を通しておくこと。
ライセンスに同意できなければ、開発することができないので、OpenJDKを調べよう。
インストーラーがダウンロードできたら、実行してインストールする。
インストールが完了したら、PATH
や JAVA_HOME
を設定しておこう。
2. IDEAの導入
Javaのプログラムを開発するためのエディタやIDEは多くあるけど、個人的には「IntelliJ IDEA」が好きだ。 開発ツールというものは、それぞれ良し悪しがあるものだけど、今回の講座では「IntelliJ IDEA」を使用してほしい。(他のIDEの場合…という記事は気が向いたら書く。)
JetBrainsという海外の企業が開発している IDE で、英語だけど、画像多めで書くので心配しないでほしい。
A. インストール
(URL: IntelliJ IDEA: The Java IDE for Professional Developers by JetBrains)
上記URLにアクセスして、「DOWNLOAD」をクリックする。
「Ultimate」「Community(無料)」という二つのバージョンがあるが、Nukkitプラグインを作る場合「Community」で十分なので、ダウンロードする。 ダウンロードができたら、実行してインストールする。
(64-bit launcher
をチェックしておくといい)
インストールしたら、実行する。
次回から、実際に作ってみます。
続き >>>