#script-apiでパーティクルを表示させたい

1 messages · Page 1 of 1 (latest)

hollow nest
#

manifestは完成しました。

#

script-apiでパーティクルを表示させたい

weak perch
#

書くので少々お待ちを...

hollow nest
#

お願いします

weak perch
#
import * as mc from '@minecraft/server'

mc.world.afterEvents.itemUse.subscribe(ev => {//アイテムを使ったとき
    const { itemStack: IS, source: pl } = ev//プレイヤーとアイテムの取得
    if (IS.typeId == 'minecraft:bow')//もし弓なら
    {
        //↓ (プレイヤーの頭の位置) から (地点Aから地点Bに向かって50進んだ座標を取得する関数(VectorForword) で取得した座標) まで 0.1ごとに座標を取得し、一つの座標を data に入れ、繰り返す
        getPointToPoints(pl.getHeadLocation(), VectorForword(pl.getHeadLocation(), pl.getViewDirection(), 50), 0.1).forEach(data => {
            pl.dimension.spawnParticle('minecraft:basic_flame_particle', data)//パーティクル召喚
        })
    }
})

function VectorForword(StartVec, DirectionVec, Step)//地点Aから地点Bに向かってStep進んだ座標を取得する関数
{
    const Vec = new mc.Vector(StartVec.x, StartVec.y, StartVec.z).normalized()//地点Aを正規化(最大値を1にする的な)  (1,2,3)だったら(1/6,2/6,3/6)になるはず。
    return mc.Vector.add(StartVec, mc.Vector.multiply(mc.Vector.subtract(mc.Vector.add(DirectionVec, Vec), Vec).normalized(), Step))//地点A + (地点B - 地点A)のStep倍かけたやつ が返り値となる。
}

function getPointToPoints(StartPos, EndPos, Step)//地点Aから地点BまでStepごとに座標を取得する関数
{
    const ret = []//空の配列ret(最終的に座標群が入る)
    const distance = (Math.sqrt((Math.pow(StartPos.x - EndPos.x,2) + (Math.pow(StartPos.y - EndPos.y,2)) + (Math.pow(StartPos.z - EndPos.z,2))))) //三平方の定理を使い、地点Aから地点Bまでの距離を計算する
    for (let i = 0; i < distance; i += Step) {// i(初期値は0)  から  (地点Aから地点Bまでの距離)  まで繰り返す。一回終わったらiにStepを足す
        ret.push(mc.Vector.add(StartPos, mc.Vector.multiply(mc.Vector.subtract(EndPos, StartPos).normalized(), i)))//地点Aから i 進んだ座標をretに追加する
    }
    return ret//ループされ沢山座標が追加された配列retが返り値となる。
}
#

たぶんこれで弓を引いたときにできるはずです

hollow nest
#

わざわざ分かりやすく書いていただいて本っ当にありがたいです!! こちらを参考にしつつ、自分でも書けるように頑張りたいと思います!!

weak perch
#

がんばってください!!

#

ちなみにmanifestはどうなりました?

hollow nest
weak perch
#

(最新バージョンがかわったので)下らへんの1.8.0を"1.10.0-beta"にする必要ありますね

weak perch
hollow nest
#

修正しました!
やってみます

#

本当にありがたいです!

weak perch
#
        //↓ (プレイヤーの頭の位置) から (地点Aから地点Bに向かって50進んだ座標を取得する関数(VectorForword) で取得した座標) まで 0.1ごとに座標を取得し、一つの座標を data に入れ、繰り返す
        getPointToPoints(pl.getHeadLocation(), VectorForword(pl.getHeadLocation(), pl.getViewDirection(), 50), 0.1).forEach(data => {
            const {x,y,z} = data//わかりやすいように座標を分裂させる(?)

            //ここから下に処理を追加する


            pl.dimension.spawnParticle('minecraft:basic_flame_particle', data)//script-apiでのパーティクル召喚方法

            pl.runCommand(`particle minecraft:basic_flame_particle ${x} ${y} ${z}`)//あんまりお勧めしないけどコマンドを使う方法(コマンドを使う方が処理が重いらしい)


            pl.dimension.getEntities({maxDistance:1}).forEach(entity=>{//座標から1ブロック離れたエンティティをすべて取得し、一体ごとに処理をする
                entity.applyDamage(5)//5ダメージ与える
            })

            pl.runCommand(`execute as @e[x=${x},y=${y},z=${z},r=1] run damage @s 5`)//あんまりお勧めしないけどコマンドを使う方法(コマンドを使う方が処理が重いらしい)


          //ここから上に処理を追加する
        })
#

弓の場合を通った先の処理をこれにしてみてください

#

たぶんダメージが入るようになるはずです

hollow nest
#

何から何まで本当に感謝しかないです! これでアドオン製作が捗ります。自分でも色々試してみたいと思います!!

weak perch
#

全体的な資料
https://learn.microsoft.com/ja-jp/minecraft/creator/scriptapi/minecraft/server/minecraft-server?view=minecraft-bedrock-experimental
プレイヤーに関する資料(pl.なんちゃら に続ける)
https://learn.microsoft.com/ja-jp/minecraft/creator/scriptapi/minecraft/server/player?view=minecraft-bedrock-experimental
イベントに関する資料(アイテムを使った時以外もあるよ)
(mc.world.afterEvents.なんちゃら.subscribe に続ける)
https://learn.microsoft.com/ja-jp/minecraft/creator/scriptapi/minecraft/server/worldafterevents?view=minecraft-bedrock-experimental
頑張ってください!!

Contents of the @minecraft/server module

Contents of the @minecraft/server.Player class.

Contents of the @minecraft/server.WorldAfterEvents class.