SlideShare una empresa de Scribd logo
1 de 30
俺九番 @orekyuu
自己紹介
• 俺九番です。
• 以前は石炭MODと幼女MOD作ってました。not ロリコン
• 最近は公開してないけどBukkitプラグインが中心。
今日する話
• 最近製作中のライブラリ「RabbitHouse」の概要
• RabbitHouse内部の実装の話
• RabbitHouseでアイテムを作るデモ
• スクリプトでGUIをこねる話
合同モド
日本ではいくつか合同MODを作る企画ができては消えていった
僕も挑戦して失敗した経験あり
・例
ed◯craft
ケ◯Craft
料理M◯D ←僕が失敗したやつ
失敗の原因
• アイデアは出るけど実装する人が少ない
→プログラム出来ない人も参加できるようにすればええんちゃう?
RabbitHouse
今はBlockやItemをツールを使って製作できるのが主な機能
独自の動きはプログラマが用意する。
・対象
合同MOD
中規模以上のMOD
・効能
開発の進捗がぴょんぴょんします。
どんなツールを作るか
• ソースコードの生成
→コンパイル必要なのでプログラム書けない人には難しい。
変更はプログラマしか出来ない。
• データファイルを読み込んで使う
→実行時にロードして使うことが可能。
ファイルの入れ替えで対応可能なので、開発環境整える必要なし。
データ形式
{
“blocks” : [
{
“name” : “ExampleBlock”,
“resource” : “IconName.png”
}
]
}
ロード処理
class MyBlocks {
@BlockField(name = “TestBlock”)
public static Block testBlock;
}
BlockLoader loader = new BlockLoader(new MyBlocks(), “MODID”);
loader.load();
loadメソッドのタイミングで、変数にインスタンスが入る。
独自の機能をもつ
classパラメータの指定があった場合は、指定されたクラスを使用して
インスタンスを生成する。
内部の実装
1.Gsonを使ってJsonをロード
2.classパラメータが存在すれば、Class.forNameでClassクラスのインスタンス
を取ってインスタンス化。なければ普通にnewして作る。
3.パラメータを設定していく。
4.BlockLoaderのコンストラクタから受け取ったインスタンスからgetClassして、
getDeclaredFieldsでFieldの配列を取る。
5.FieldにBlockFieldアノテーションがついていれば手順2で作ったインスタン
スをsetする
リフレクション結構使ってるけど、MODのロード時の処理のため、速度が遅
くても問題なし。
フォーマットのミスに対処する
ロード時に不正なパラメータが見つかればBlockDataFormatException
を発生させてプログラムを終了するようにしている。
フォーマットが間違っていた時点で正常に動かない可能性が高いから、
見つけたら即終了。
デモ
• 村人を殴るとゾンビになるアイテムを作ってみる
今後の課題
• 自由度が低いし、まださほど便利に感じない
• json吐き出すツールまだ作ってない
• プログラマ向けの機能も用意しなければ・・・
↑ここの話するよ
スクリプトでGUI
マインクラフトを起動したままGUIのレイアウトを変更する。
某ロリコンホモ氏と通話してる時にアイデアを頂きました
某ロリコンホモ曰く
スクリプトマジ便利だよ
GUIとかで使うと捗る
アナルソイヤ
ロリコンホモはさておきやってみる
スクリプト言語の選択
• JRuby
• Jython
• JavaScript
GUIをJavaScriptで描画できるようにする
• javax.scriptパッケージのJavaScriptエンジンを使う。
• Java7まではMozila Rhinoが搭載されている。
• Java8だとNashornが搭載されて、かなり早いらしいので使いたかった
けど、まだ対応してないから仕方がない・・・。
JavaScriptエンジンの使い方
//JavaScriptのエンジンを作成
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(“js”);
JavaScriptファイルを読み込む
evalメソッドでReaderを渡して読み込む。
デバッグ中は必ず絶対パスで渡すこと。
//デバッグ中
engine.eval(new FileReader(“jsの絶対パス”));
//配布時
InputStream is = getClass().getResourceAsStream(“hoge.js”);
engine.eval(new InputStreamReader(is));
jsのメソッド呼び出し
ScriptEngineをInvocableでキャストし、invokeFunctionで呼び出す
//jsのdrawForeground呼び出し
invocable.invokeFunction("drawForeground", xSize, ySize,
width, height, this, fontRendererObj);
JavaScriptからJavaのオブジェクトを生成
//import文に相当
importPackage(net.minecraft.util);
//オブジェクト作成
var resource = new ResourceLocation(“hoge.png”);
バインド
Java側のスコープをバインドします。
//バインドオブジェクトを作成
Bindings bindings = new SimpleBindings();
//第二引数の値が第一引数の変数名でJS側から使用できる
bindings.put(“js側の変数名”, 値);
//スコープを指定してバインド
engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
読み込むタイミング
• GUIを開くごとに読み込みなおしても今のところ問題なかった。
• 開く時に固まるとかはない。
• 変更を反映するにはGUI開き直しでOK
• ファイル変更通知を受け取ってリロードとか、一定時間ごとにすると
マイクラの状態みながら編集できるし楽そう!
デモ
スクリプトの使い所
• GUIのような微調整が必要なもの。
• トライアンドエラーが多い場所。
速度がやっぱり遅いので、速度が求められるような所では使えない
まとめ
• 簡単な単純作業はRabbitHouse使って別の人に任せる。
• GUIとかはスクリプト使って楽に作る。
• スクリプト使った処理はRabbitHouseに将来入れる予定。
おしまい

Más contenido relacionado

Destacado

Spring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターSpring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターorekyuu
 
Gradle入門
Gradle入門Gradle入門
Gradle入門orekyuu
 
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】Ryota Murohoshi
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたいyy yank
 
Blenderで作成したデータをMinecraftにぶっこむ
Blenderで作成したデータをMinecraftにぶっこむBlenderで作成したデータをMinecraftにぶっこむ
Blenderで作成したデータをMinecraftにぶっこむTakuro Wada
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlinRyota Murohoshi
 
Minecraft Modding入門
Minecraft Modding入門Minecraft Modding入門
Minecraft Modding入門Pctg_x8
 
자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)Chang-Hwan Han
 
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.Nasol Kim
 
Minecraft で遊びつつ プログラミングを学ぼう ~ ComputerCraft のすすめ ~
Minecraft で遊びつつ プログラミングを学ぼう ~ ComputerCraft のすすめ ~Minecraft で遊びつつ プログラミングを学ぼう ~ ComputerCraft のすすめ ~
Minecraft で遊びつつ プログラミングを学ぼう ~ ComputerCraft のすすめ ~hevohevo
 
CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…Hiromu Yakura
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlinyy yank
 
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjpcocodrips
 
Java9 특징 훑어보기
Java9 특징 훑어보기Java9 특징 훑어보기
Java9 특징 훑어보기duriepark 유현석
 
Mobの作り方
Mobの作り方Mobの作り方
Mobの作り方iwa_yuki
 

Destacado (15)

Spring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターSpring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフター
 
Gradle入門
Gradle入門Gradle入門
Gradle入門
 
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたい
 
Blenderで作成したデータをMinecraftにぶっこむ
Blenderで作成したデータをMinecraftにぶっこむBlenderで作成したデータをMinecraftにぶっこむ
Blenderで作成したデータをMinecraftにぶっこむ
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
 
Minecraft Modding入門
Minecraft Modding入門Minecraft Modding入門
Minecraft Modding入門
 
자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)
 
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.
인내심없는 개발자를 위한 자바스크립트 - 한줄씩 영어공부하기.
 
Minecraft で遊びつつ プログラミングを学ぼう ~ ComputerCraft のすすめ ~
Minecraft で遊びつつ プログラミングを学ぼう ~ ComputerCraft のすすめ ~Minecraft で遊びつつ プログラミングを学ぼう ~ ComputerCraft のすすめ ~
Minecraft で遊びつつ プログラミングを学ぼう ~ ComputerCraft のすすめ ~
 
CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlin
 
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
 
Java9 특징 훑어보기
Java9 특징 훑어보기Java9 특징 훑어보기
Java9 특징 훑어보기
 
Mobの作り方
Mobの作り方Mobの作り方
Mobの作り方
 

Similar a ご注文はライブラリですか?

とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方Yusuke Wada
 
GoPiGo2で遊んでみた
GoPiGo2で遊んでみたGoPiGo2で遊んでみた
GoPiGo2で遊んでみたKazuyuki Mori
 
RubyMotionを1週間 触ってみた印象
RubyMotionを1週間 触ってみた印象RubyMotionを1週間 触ってみた印象
RubyMotionを1週間 触ってみた印象Tatsuya Tobioka
 
みくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウみくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウtorisoup
 
初めてのアジャイル開発プロジェクトを終えて
初めてのアジャイル開発プロジェクトを終えて初めてのアジャイル開発プロジェクトを終えて
初めてのアジャイル開発プロジェクトを終えてdnakagome
 
IoTとDeep Learningで自宅警備員を育ててみる
IoTとDeep Learningで自宅警備員を育ててみるIoTとDeep Learningで自宅警備員を育ててみる
IoTとDeep Learningで自宅警備員を育ててみるYasuyuki Sugai
 
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-nishio
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことTakao Sumitomo
 
ハッピーおうちハッキング - 第2回おうちハック勉強会 キーノートトーク
ハッピーおうちハッキング - 第2回おうちハック勉強会 キーノートトークハッピーおうちハッキング - 第2回おうちハック勉強会 キーノートトーク
ハッピーおうちハッキング - 第2回おうちハック勉強会 キーノートトークhecomi
 
おうちハック勉強会2
おうちハック勉強会2おうちハック勉強会2
おうちハック勉強会2hecomi
 
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回都元ダイスケ Miyamoto
 
goroutineはどうやって動いているのか
goroutineはどうやって動いているのかgoroutineはどうやって動いているのか
goroutineはどうやって動いているのかota42y
 
Mruby and microcomputer_board
Mruby and microcomputer_boardMruby and microcomputer_board
Mruby and microcomputer_boardHara Yoshihiko
 
Global Lab Sendai主催 Unity初心者講座2018
Global Lab Sendai主催 Unity初心者講座2018Global Lab Sendai主催 Unity初心者講座2018
Global Lab Sendai主催 Unity初心者講座2018Jun Shimura
 

Similar a ご注文はライブラリですか? (14)

とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方
 
GoPiGo2で遊んでみた
GoPiGo2で遊んでみたGoPiGo2で遊んでみた
GoPiGo2で遊んでみた
 
RubyMotionを1週間 触ってみた印象
RubyMotionを1週間 触ってみた印象RubyMotionを1週間 触ってみた印象
RubyMotionを1週間 触ってみた印象
 
みくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウみくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウ
 
初めてのアジャイル開発プロジェクトを終えて
初めてのアジャイル開発プロジェクトを終えて初めてのアジャイル開発プロジェクトを終えて
初めてのアジャイル開発プロジェクトを終えて
 
IoTとDeep Learningで自宅警備員を育ててみる
IoTとDeep Learningで自宅警備員を育ててみるIoTとDeep Learningで自宅警備員を育ててみる
IoTとDeep Learningで自宅警備員を育ててみる
 
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
 
ハッピーおうちハッキング - 第2回おうちハック勉強会 キーノートトーク
ハッピーおうちハッキング - 第2回おうちハック勉強会 キーノートトークハッピーおうちハッキング - 第2回おうちハック勉強会 キーノートトーク
ハッピーおうちハッキング - 第2回おうちハック勉強会 キーノートトーク
 
おうちハック勉強会2
おうちハック勉強会2おうちハック勉強会2
おうちハック勉強会2
 
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回
 
goroutineはどうやって動いているのか
goroutineはどうやって動いているのかgoroutineはどうやって動いているのか
goroutineはどうやって動いているのか
 
Mruby and microcomputer_board
Mruby and microcomputer_boardMruby and microcomputer_board
Mruby and microcomputer_board
 
Global Lab Sendai主催 Unity初心者講座2018
Global Lab Sendai主催 Unity初心者講座2018Global Lab Sendai主催 Unity初心者講座2018
Global Lab Sendai主催 Unity初心者講座2018
 

ご注文はライブラリですか?