今天我們試試看透過右鍵偵測來製作出一把可以招喚火焰特效(粒子效果)的法杖(木棍)
首先我回到之前那個右鍵偵測的程式。
我們可以找到這段程式碼
if (!event.getLevel().isClientSide)
這是一開始我們為了在伺服器端執行程式而不是客戶端而做的判斷式,但是當我們需要做出例子特效的時候就行不通了,應為我們的粒子特效需要在客戶端執行才能做出遊戲特效,因為特效在玩家電腦裡渲染。
我們改成
if (event.getLevel().isClientSide)
接下來我們的程式碼有些變數需要重新設定
Player player = event.getEntity();
ItemStack HeldItem = player.getItemInHand(InteractionHand.MAIN_HAND);
if (!HeldItem.isEmpty() && HeldItem.getItem() == Items.STICK) {
Component rightClickMessage = Component.literal("Stick Click");
player.sendSystemMessage(rightClickMessage);
double Px = player.getX()+player.getLookAngle().x;
double Py = player.getY()+player.getEyeHeight()+player.getLookAngle().y;
double Pz = player.getZ()+player.getLookAngle().z;
for (int i = 0; i < 20; i++) {
player.level.addAlwaysVisibleParticle(ParticleTypes.FLAME, Px, Py, Pz,0,0,0);
}
}
這裡我們將玩家手持的物品設定成Stick也就是木棍,然後我們透過Px,Py,Pz取得玩家目前所在與面向的方向,方面我們設定粒子出現的方向,我們接下來要生成粒子,我們寫出一個for迴圈來不斷生成粒子,總計生成20個,我們已addAlwaysVisibleParticle來生成粒子,第一個參數是ParticleTypes,我們選擇Flame火焰,接下來是粒子生成方位,分別是Px,Py,Pz,接下來三個數我們可以設0。
感覺火焰效果時間要延長,還要把火焰數量提高,不然像是我自己燒起來一樣