右クリでファイヤーチャージを射出するソースコードを…

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.260629)

右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年1月25日(月) 03:46

右クリックするとファイヤーチャージを射出するmodを作りたいのですが
投稿されているものを試して、エラーを改善しても無理でした…
誰かソースコードをくれると助かります
ちなみにバージョンは1.7.10です
しおみずしゃんしゃん
ID:384672f8
 

  • (PostNo.260648)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by 新人もっだー » 2016年1月25日(月) 16:03

1.7.10だけでなく、Forgeのバージョンも入れましょう。
バージョンによってソースが変わるので。
http://forum.minecraftuser.jp/viewtopic.php?f=39&t=8544
instance().instance().instance() = null;
アバター
新人もっだー
ID:f4092567
石掘り
 
記事: 131
登録日時: 2015年6月22日(月) 17:58

  • (PostNo.260652)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年1月25日(月) 16:08

すいません!
forgeのversionは1.7.10-Forge10.13.4.1448-1.7.10です!
しおみずしゃんしゃん
ID:384672f8
 

  • (PostNo.260759)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by 新人もっだー » 2016年1月26日(火) 16:34

右クリックというのは、アイテムをもって右クリックするということですか?
instance().instance().instance() = null;
アバター
新人もっだー
ID:f4092567
石掘り
 
記事: 131
登録日時: 2015年6月22日(月) 17:58

  • (PostNo.260762)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年1月26日(火) 17:15

はい
アイテムを持って、右クリックするというのです
しおみずしゃんしゃん
ID:384672f8
 

  • (PostNo.260791)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by komugiko » 2016年1月26日(火) 22:24

ItemEgg・EntityGhast・EntityLargeFireball・EntityFireball あたりのソースを見ながら進めるとわかるかもしれません。
ItemEggには右クリックでEntityを発射する処理がありますし、EntityLargeFireball・EntityFireballはファイヤーチャージの本体になります。
あと、EntityGhastにはEntityLargeFireballを発射する処理があるので、組み合わせれば右クリックでファイヤーチャージを打ち出す処理が完成するかと。
komugiko
ID:a394c69a
石炭掘り
 
記事: 202
登録日時: 2013年3月07日(木) 21:26

  • (PostNo.260794)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年1月26日(火) 22:37

わかりました!試してみます!
しおみずしゃんしゃん
ID:384672f8
 

  • (PostNo.260799)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年1月26日(火) 23:40

あのすいませんItemEggに投げる処理がないんですけど
別の奴だったりしますか?
しおみずしゃんしゃん
ID:384672f8
 

  • (PostNo.260805)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年1月26日(火) 23:58

ごめんなさい、ありました
しおみずしゃんしゃん
ID:384672f8
 

  • (PostNo.260807)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年1月27日(水) 00:13

すいません
EntityEggは出来たのですが
Entityfireballは出来ませんでした…
一応ソースコード貼っておきます
package mod.mcreator;//based on master condiguration

import cpw.mods.fml.client.*;
import cpw.mods.fml.client.registry.*;
import cpw.mods.fml.common.*;
import cpw.mods.fml.common.asm.*;
import cpw.mods.fml.common.asm.transformers.*;
import cpw.mods.fml.common.discovery.*;
import cpw.mods.fml.common.discovery.asm.*;
import cpw.mods.fml.common.event.*;
import cpw.mods.fml.common.functions.*;
import cpw.mods.fml.common.network.*;
import cpw.mods.fml.common.registry.*;
import cpw.mods.fml.common.toposort.*;
import cpw.mods.fml.common.versioning.*;
import cpw.mods.fml.relauncher.*;
import cpw.mods.fml.server.*;
import net.minecraft.block.*;
import net.minecraft.block.material.*;
import net.minecraft.client.*;
import net.minecraft.client.audio.*;
import net.minecraft.client.entity.*;
import net.minecraft.client.gui.*;
import net.minecraft.client.gui.achievement.*;
import net.minecraft.client.gui.inventory.*;
import net.minecraft.client.model.*;
import net.minecraft.client.multiplayer.*;
import net.minecraft.client.particle.*;
import net.minecraft.client.renderer.*;
import net.minecraft.client.renderer.culling.*;
import net.minecraft.client.renderer.entity.*;
import net.minecraft.client.renderer.tileentity.*;
import net.minecraft.client.settings.*;
import net.minecraft.command.*;
import net.minecraft.crash.*;
import net.minecraft.creativetab.*;
import net.minecraft.dispenser.*;
import net.minecraft.enchantment.*;
import net.minecraft.entity.*;
import net.minecraft.entity.ai.*;
import net.minecraft.entity.boss.*;
import net.minecraft.entity.effect.*;
import net.minecraft.entity.item.*;
import net.minecraft.entity.monster.*;
import net.minecraft.entity.passive.*;
import net.minecraft.entity.player.*;
import net.minecraft.entity.projectile.*;
import net.minecraft.inventory.*;
import net.minecraft.item.*;
import net.minecraft.item.crafting.*;
import net.minecraft.nbt.*;
import net.minecraft.network.*;
import net.minecraft.network.rcon.*;
import net.minecraft.pathfinding.*;
import net.minecraft.potion.*;
import net.minecraft.profiler.*;
import net.minecraft.server.*;
import net.minecraft.server.dedicated.*;
import net.minecraft.server.gui.*;
import net.minecraft.server.integrated.*;
import net.minecraft.server.management.*;
import net.minecraft.src.*;
import net.minecraft.stats.*;
import net.minecraft.tileentity.*;
import net.minecraft.util.*;
import net.minecraft.village.*;
import net.minecraft.world.*;
import net.minecraft.world.biome.*;
import net.minecraft.world.chunk.*;
import net.minecraft.world.chunk.storage.*;
import net.minecraft.world.demo.*;
import net.minecraft.world.gen.*;
import net.minecraft.world.gen.feature.*;
import net.minecraft.world.gen.layer.*;
import net.minecraft.world.gen.structure.*;
import net.minecraft.world.storage.*;
import net.minecraftforge.classloading.*;
import net.minecraftforge.client.*;
import net.minecraftforge.client.event.*;
import net.minecraftforge.client.event.sound.*;
import net.minecraftforge.common.*;
import net.minecraftforge.event.*;
import net.minecraftforge.event.entity.*;
import net.minecraftforge.event.entity.item.*;
import net.minecraftforge.event.entity.living.*;
import net.minecraftforge.event.entity.minecart.*;
import net.minecraftforge.event.entity.player.*;
import net.minecraftforge.event.terraingen.*;
import net.minecraftforge.event.world.*;
import net.minecraftforge.oredict.*;
import net.minecraftforge.transformers.*;
import net.minecraft.init.*;
import java.util.*;

import net.minecraftforge.common.util.*;public class mcreator_ancientsword{

public mcreator_ancientsword(){}

public static Item block;
public static Object instance;public void load(){
ItemStack stack = new ItemStack(block, 1);
GameRegistry.addRecipe(stack, new Object[]{
"X1X", "345", "X7X", Character.valueOf('1'), new ItemStack(Blocks.redstone_block, 1), Character.valueOf('3'), new ItemStack(Blocks.redstone_block, 1), Character.valueOf('4'), new ItemStack(Items.diamond, 1), Character.valueOf('5'), new ItemStack(Blocks.redstone_block, 1), Character.valueOf('7'), new ItemStack(Items.blaze_rod, 1),
});}
public void generateNether(World world, Random random, int chunkX, int chunkZ){}
public void generateSurface(World world, Random random, int chunkX, int chunkZ){}
public int addFuel(ItemStack fuel){return 0;}
public void serverLoad(FMLServerStartingEvent event){}
public void preInit(FMLPreInitializationEvent event){}
public void registerRenderers(){}


static{
Item.ToolMaterial enumt = EnumHelper.addToolMaterial("ANCIENTSWORD", 3, 100, 5F, 6, 15);block = (Item)(new ItemSword(enumt){public Set<String> getToolClasses(ItemStack stack){
HashMap<String, Integer> ret = new HashMap<String, Integer>();
ret.put("sword", 3);
return ret.keySet();
}


public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entity){
float var4 = 1.0F;
int i = (int)(entity.prevPosX + (entity.posX - entity.prevPosX) * (double)var4);
int j = (int)(entity.prevPosY + (entity.posY - entity.prevPosY) * (double)var4 + 1.62D - (double)entity.yOffset);
int k = (int)(entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double)var4);

if(true){
world.spawnEntityInWorld(new EntityEgg(world, i, j, k));
}



return itemstack;
}
}).setUnlocalizedName("Ancientsword").setTextureName("Ancient_sword");
Item.itemRegistry.addObject(438, "Ancientsword", block);

}

}
しおみずしゃんしゃん
ID:384672f8
 

  • (PostNo.260810)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by komugiko » 2016年1月27日(水) 01:11

変わった書き方なので少々面食らいましたが、onItemRightClickをこうしてみたらどうでしょう。

コード: 全て選択
public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entity)
         {
            Vec3 look = entity.getLookVec();//プレイヤーの視線ベクトル取得
            if(!world.isRemote)//←サーバー側でのみ、spawnEntityInWorld実行
            {
               world.spawnEntityInWorld(new EntityLargeFireball(world,entity, look.xCoord, look.yCoord, look.zCoord));//EntityLargeFireballの引数(World ,射手となるEntityLivingBase,x発射方向,y発射方向,z発射方向)
            }
            return itemstack;
         }
komugiko
ID:a394c69a
石炭掘り
 
記事: 202
登録日時: 2013年3月07日(木) 21:26

  • (PostNo.260851)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年1月27日(水) 16:39

書き方おかしかったですかね…すいません…
試してみます!
しおみずしゃんしゃん
ID:384672f8
 

  • (PostNo.260858)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年1月27日(水) 18:37

できました!
でもランダムに飛ぶので
狙った方向にまっすぐ飛ぶようにするにはどうすればいいですか?
しおみずしゃんしゃん
ID:384672f8
 

  • (PostNo.260896)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by komugiko » 2016年1月27日(水) 22:53

ランダムに飛ぶのはEntityLargeFireballのコンストラクタ内(というかEntityFireballのコンストラクタ内)の記述を見れば理由はわかるかと思います。
EntityFireballのフィールドaccelerationX・Y・Z(加速度)が進行方向を握っているわけですが、これを代入するときに乱数が使われているのが原因ですね。
で、このaccelerationX・Y・Zはpublicなので外から書き換えができます。
EntityFireballのコンストラクタを見ながら適切な値を代入してやればまっすぐ進むかと。
プレイヤーのgetLookVec()のxCoord・yCoord・zCoordをそれぞれ何倍かして入力するのが適切でしょうか。

あとは、EntityLargeFireball(World , double [座標x], double [座標y], double [座標z], double [方向x], double [方向y], double [方向z])
のほうを使って生成すれば、乱数が入らないのでまっすぐ飛ぶかもしれません。
ただ、この場合発射主が登録されないので、自分の弾に当たらないように座標を調整するか、shootingEntityがpublicなのであとからプレイヤーを代入するかしたほうが良いかもしれません。

強引な手段としては、適当なDamageSourceを 生成して発射したファイアチャージのattackEntityFrom()メソッドを呼ぶと言う手もありですね。


いずれにせよ、発射したファイアチャージのaccelerationX・Y・Zがプレイヤーの視線に対して平行になるように調節すればまっすぐ飛ぶかと思います。
komugiko
ID:a394c69a
石炭掘り
 
記事: 202
登録日時: 2013年3月07日(木) 21:26

  • (PostNo.260898)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年1月27日(水) 23:02

わかりました!
いろいろ試してみます!
しおみずしゃんしゃん
ID:384672f8
 

  • (PostNo.260901)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by elise_blacklab » 2016年1月27日(水) 23:08

komugiko さんが書きました:あとは、EntityLargeFireball(World , double [座標x], double [座標y], double [座標z], double [方向x], double [方向y], double [方向z])
のほうを使って生成すれば、乱数が入らないのでまっすぐ飛ぶかもしれません。

補足というか注意なんですが,これEntityLargeFireball(等バニラのEntityFireball継承クラス)内ではクライアント専用のコンストラクタです.
参考: viewtopic.php?f=13&t=13542&start=200#p228940
MODをマルチプレイに対応させたい場合このコンストラクタは使えません.
どうしてもこのコンストラクタを使いたいのであれば,スーパークラスEntityFireballではクライアント専用になっていないので,継承クラスを独自に作成して再定義するなり何なりする必要があります.
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:d1564437
掘り廃人
 
記事: 2456
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.260904)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by komugiko » 2016年1月27日(水) 23:30

elise_blacklab さんが書きました:
komugiko さんが書きました:あとは、EntityLargeFireball(World , double [座標x], double [座標y], double [座標z], double [方向x], double [方向y], double [方向z])
のほうを使って生成すれば、乱数が入らないのでまっすぐ飛ぶかもしれません。

補足というか注意なんですが,これEntityLargeFireball(等バニラのEntityFireball継承クラス)内ではクライアント専用のコンストラクタです.
参考: viewtopic.php?f=13&t=13542&start=200#p228940
MODをマルチプレイに対応させたい場合このコンストラクタは使えません.
どうしてもこのコンストラクタを使いたいのであれば,スーパークラスEntityFireballではクライアント専用になっていないので,継承クラスを独自に作成して再定義するなり何なりする必要があります.

すいませんでした。
コンストラクタに@SideOnlyが使えることを知らなかったので見落としていたようです。

そうなるとaccelerationX・Y・Zを書き換える方法が無難かもしれませんね。
(World , EntityLivingBase , double , double , double )の方は大丈夫と言う解釈でよければですが。
komugiko
ID:a394c69a
石炭掘り
 
記事: 202
登録日時: 2013年3月07日(木) 21:26

  • (PostNo.266456)

Re: 右クリでファイヤーチャージを射出するソースコードを…

投稿記事by しおみずしゃんしゃん » 2016年3月05日(土) 14:22

ありがとうございます!
出来ました!(まさか2016年になるとは…w)
本当にありがとうございます!
しおみずしゃんしゃん
ID:384672f8
 


Return to 質問:開発・制作関連

x