【永久保存版】マイクラ統合版のScriptAPIを完全解説 - 概要とコマンド、UI、エンチャントの自作方法について -【プログラミング】

  Рет қаралды 3,298

レモンスライム 【マイクラ技術ラボ】

レモンスライム 【マイクラ技術ラボ】

Күн бұрын

Пікірлер: 40
@TOMATIDO
@TOMATIDO 5 күн бұрын
Unityゲーとかで云う「Harmonyパッチ」と同じことをしてるね 既存の処理の前後に新しく処理を追加したり完全に置き換えたり(厳密には既存の処理の前に新しく処理を追加し既存の処理のスキップする)できるところとか
@lemonslime
@lemonslime 6 күн бұрын
レンダリングに5時間かかりました...Σ( ºωº ) マインクラフトには、「スクリプトAPI(ScriptAPI)」と呼ばれる拡張機能が存在します。この「スクリプトAPI」とは、プログラミング言語(Javascript)を用いてゲームシステムをカスタマイズできる機能のことであり、Javascriptの知識さえあれば、マインクラフトのシステムをある程度いじることができるんです。 本動画では、このスクリプトAPI(ScriptAPI)についての情報を体系化し、この動画を一通り見ることでその概要・書き方・実践的な使い方が学べるようにすることを目的とします。動画内で言及される各種スクリプトについては以下をご覧ください。 【ScriptAPIのテンプレート】lemon-slime.com/?p=1210 【ScriptAPIの環境構築】lemon-slime.com/?p=1254 【UIの作り方1】lemon-slime.com/?p=1299 【UIの作り方2】lemon-slime.com/?p=1299 【コマンドの作り方1】lemon-slime.com/?p=1404 【コマンドの作り方2】lemon-slime.com/?p=1492 【クールダウン】lemon-slime.com/?p=1235 【ブロックを動かす】lemon-slime.com/?p=1638 【vscode】code.visualstudio.com/ 【node.js】nodejs.org/en/download/prebui... 【uuidジェネレーター】www.uuidgenerator.net/ 【記事の字幕】lemon-slime.com/?p=1662 本動画は過去動画に編集を加えたうえでまとめたものです。元動画における一部の情報や冗長的な表現は省かれていますので、見やすくなっているかと思います。詳細な情報については、元動画をご覧ください。
@nag_lint_lino
@nag_lint_lino 5 күн бұрын
48:26 main.js内でクールダウンタイムの変数を設定して毎tick実行する関数にそのクールダウンを減らす処理を書けば良いのでは?
@lemonslime
@lemonslime 5 күн бұрын
@nag_lint_lino ちょっと回りくどかったですね... ご指摘ありがとうございます!
@nag_lint_lino
@nag_lint_lino 5 күн бұрын
@@lemonslimeJavaScript自身が内部で計算してくれるプログラミング言語であることをお忘れなく。
@十葉-よつばティネル
@十葉-よつばティネル 6 күн бұрын
いつも参考にさせて頂いてます 質問なのですが EntityHitEntityAfterEventを使って playerがplayerに攻撃を当てた時に コマンドを一度実行するということは可能でしょうか 実際にコードを入れてみると 一度のヒットで一度実行される訳ではなく ヒット後に2tick程ラグがある(?)感じでその間出来るだけコマンドを実行され、自分の環境では800回ほど実行されました 自分が出した解決案としては攻撃を受けた時に攻撃を受けたplayerをスペクテイターにし、攻撃を受けたplayerのdynamicpropertyをtrueにし続け 他の箇所でdynamicpropertyがtrueのプレイヤーに対して2tickのクールダウン後にコマンドを実行することで対処しました ですがコマンドの実行に2tickのラグが起きてしまうのと、プレイヤーをスペクテイターにしないと成り立たない、単純に2tick起きにしか実行出来ないなど 用途が限定的です 何か案があれば教えて頂きたいです
@ラグすけ
@ラグすけ 6 күн бұрын
entityHurtを使ってみてください コマンドが複数回実行される件ですが、もしかしてrunIntervalの中に書いていませんか?
@十葉-よつばティネル
@十葉-よつばティネル 6 күн бұрын
@@ラグすけ おっしゃる通り中に書いてました‪( ´•̥ ̫ •̥` )‬ 外に出したら無事期待する挙動になりました ありがとうございますm(*_ _)m
@Nowar4649
@Nowar4649 6 күн бұрын
質問です!! VSCodeの拡張機能って何を使ってますか?
@lemonslime
@lemonslime 6 күн бұрын
@Nowar4649 TabnineというAIコード補完機能を使ってます! 無料なのに便利でおススメですよ~ 学生ならGitHub Copilotという選択肢もあると思います。 私は何度やっても拒否されたので諦めました。
@min-cr2rm
@min-cr2rm 5 күн бұрын
額縁に入ってるアイテムの取得とかできるんですかねぇ、 リファレンスみても見つからなくて😢
@reto9900k
@reto9900k 5 күн бұрын
額縁は現状できません😢
@テリー-w1l
@テリー-w1l 6 күн бұрын
見返そうと思ってたので助かります! 特定の物品の売買をフォームで出来るアドオン作成したいのですが、アイテムを売る時にその人がそのアイテムを1個以上持っているのかの検知はどうすれば出来るでしょうか?
@lemonslime
@lemonslime 6 күн бұрын
@テリー-w1l プレイヤーがアイテムを持っているかどうかを判定する関数を作ってみました: function has_item(itemName, player){ for (let i=0;i
@lemonslime
@lemonslime 6 күн бұрын
この関数の使用例です: server.system.afterEvents.scriptEventReceive.subscribe(ev => { if(ev.id == "lq:test"){ let player = ev.sourceEntity; if(has_item("minecraft:apple",player)){ player.runCommand("say リンゴを持っています"); }else{ player.runCommand("say リンゴを持っていません"); } } })
@テリー-w1l
@テリー-w1l 6 күн бұрын
​@@lemonslimeなるほど⋯そうやって取得するのか。スライダーかテキストで個数指定して売れるようにしたいのですが可能ですか?あとからすみません
@lemonslime
@lemonslime 6 күн бұрын
まずは以下のようにインベントリ内のアイテムの個数を取得する関数を定義します: function get_item_amount(itemName, player){ let amount = 0 for (let i=0;i
@テリー-w1l
@テリー-w1l 6 күн бұрын
@@lemonslime いつもご丁寧にありがとうございます!またつまずいたら相談させて下さい!
@AzuBeann
@AzuBeann 5 күн бұрын
ホリデークリエイターの代わりに使おうと思ってたが… ナニコレむっず
@卵掛けないご飯
@卵掛けないご飯 6 күн бұрын
entityを殴ったらuiを開くというのはどうすればできるのでしょうか?
@lemonslime
@lemonslime 6 күн бұрын
@卵掛けないご飯 まず動画内で説明しているようにUIを表示する関数(show_form(player))を宣言して、 server.world.afterEvents.entityHitEntity.subscribe(ev => { let player = ev.damagingEntity; if(player.typeId == "minecraft:player"){ show_form(player); } }) のようにフォームを呼び出せばOKです。
@卵掛けないご飯
@卵掛けないご飯 6 күн бұрын
@@lemonslime ありがとうございます!
@卵掛けないご飯
@卵掛けないご飯 6 күн бұрын
@@lemonslime ゾンビなどを指定する場合はどうすればいいですか?エラーになってできなかったです、、
@lemonslime
@lemonslime 6 күн бұрын
@卵掛けないご飯 以下は、ゾンビを攻撃したときに限ってフォームを表示する例です: server.world.afterEvents.entityHitEntity.subscribe(ev => { let player = ev.damagingEntity; if(player.typeId == "minecraft:player" && ev.hitEntity.typeId == "minecraft:zombie"){ show_form(player); } })
@卵掛けないご飯
@卵掛けないご飯 6 күн бұрын
@@lemonslime 本当にありがとうございます!応援してます!
@lemon-1335
@lemon-1335 6 күн бұрын
PCがないから出来ねぇや…笑
@3dsfancyverbena
@3dsfancyverbena 6 күн бұрын
スマホでも作れるけどね... めんどくさいだけで
@soul_fb9990
@soul_fb9990 4 күн бұрын
AndroidでもiOS(iPad,iPhone)でもできるから大丈夫! 怖がらないで……一緒に沼にハマろう……
@くも-f2y
@くも-f2y 3 күн бұрын
だよな、
@lemon-1335
@lemon-1335 2 күн бұрын
@@soul_fb9990 とっくに沼にはハマってるんだよね笑
@tooori_iyo
@tooori_iyo 5 күн бұрын
統合版はc++言語なのにJAVA言語つかえるの?
@oc9304
@oc9304 5 күн бұрын
JavaScriptの方ですね、ScriptAPIと名付けられてるのでNode.jsとMinecraftで処理のやり取りしてるんじゃないでしょうか
@reto9900k
@reto9900k 5 күн бұрын
ScriptAPIはc++製のマイクラ内にJavaScriptエンジン(QuickJS)を埋め込むことで作られています!
@tooori_iyo
@tooori_iyo 5 күн бұрын
@@reto9900k なるほど! プログラミング言語をプラスで足してる感じの機能なんですね
@oc9304
@oc9304 4 күн бұрын
@@reto9900k なるほど!Node.jsいれる必要があるからマイクラ内にはエンジン積んでないと思ってました!
@reto9900k
@reto9900k 4 күн бұрын
Nodejsを入れるのはエディタ上で使う型補完をインストールするためなので、マイクラ上での実際の動作とは別物な感じですね〜
Trick-or-Treating in a Rush. Part 2
00:37
Daniel LaBelle
Рет қаралды 45 МЛН
Человек паук уже не тот
00:32
Miracle
Рет қаралды 4,1 МЛН
When u fight over the armrest
00:41
Adam W
Рет қаралды 26 МЛН
How A Steam Bug Deleted Someone’s Entire PC
11:49
Kevin Fang
Рет қаралды 1 МЛН
Exploring Abandoned Games From My Childhood
16:34
globert
Рет қаралды 4 МЛН
Trick-or-Treating in a Rush. Part 2
00:37
Daniel LaBelle
Рет қаралды 45 МЛН