[1.7.10 Forge] アイテムの左クリックイベントについて

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

[1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by White3910 » 2015年8月29日(土) 15:17

こんにちは。
MinecraftForge の ver 1.7.10で特定のアイテムを持って左クリックをすると、プレイヤーの向いている方向にブロックが置かれるというModを開発しています。

現在は、右クリックによって、その処理を行っていますが、どうやら、
右クリックの onItemRightClick のように、クリックだけで起こせるようなイベントが、私が探した限りでは見つかりません...

コード: 全て選択
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
        if(!world.isRemote) {
            int x = (int)Math.floor(player.posX);
            int y = (int)Math.floor(player.posY);
            int z = (int)Math.floor(player.posZ);
            int dir = MathHelper.floor_double((double)(player.rotationYaw * 8.0F / 360.0F) + 0.5D) & 7;
            switch(dir) {
            case 0:


左クリックをしただけで、イベントをおこす手段はないのでしょうか?
ないとしても、代わりになる方法があれば、どうか、アドバイスをくださいm(_ _)m
ちなみに、持っているアイテムの性質は、「Sword」です。
White3910
ID:b2e20161
木を殴ってる
 
記事: 20
登録日時: 2013年10月16日(水) 17:13

  • (PostNo.245150)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by defeatedcrow » 2015年8月29日(土) 17:16

public boolean onEntitySwing(EntityLivingBase entity, ItemStack stack)

Worldや座標はEntityからとれます
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:bed7c33f
ラピスラズリ収集家
 
記事: 969
登録日時: 2014年1月08日(水) 13:48

  • (PostNo.245162)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by White3910 » 2015年8月29日(土) 18:35

そんな感じのものをずっと探していました!
どうもありがとうございます^^
White3910
ID:39272d4b
木を殴ってる
 
記事: 20
登録日時: 2013年10月16日(水) 17:13

  • (PostNo.245280)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by White3910 » 2015年8月30日(日) 12:40

教えてくれてありがとうございます。
参考にさせていただくにあたって、Java初心者の私にとって、詰まるところがいくつかあったので、
どうか助言をいただきたいと思います。
以下のコードの処理を、
public boolean onEntitySwing(); のメソッドにしたいと思いましたが、変えてもエラーばかり吐かれてしまいます--;
どうすれば、正常に左クリックSwingで動くようになるのでしょうか。。。

↓ 全部載せちゃいます
コード: 全て選択
    @Override
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {


        if (!world.isRemote) {
            int x = (int) Math.floor(player.posX);
            int y = (int) Math.floor(player.posY);
            int z = (int) Math.floor(player.posZ);
            int dir = MathHelper.floor_double((double) (player.rotationYaw * 8.0F / 360.0F) + 0.5D) & 7;
            world.playSound((double) x + 0.5, (double) y + 0.5, (double) z + 0.5, "examplemod:photonswing", 1.0f, 1.0f, false);


            switch (dir) {
                case 0:
                    world.setBlock(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.setBlock(x, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 1:
                    world.setBlock(x, y + 1, z + 2, ExampleMod.sao_skill_block);
                    world.setBlock(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.setBlock(x - 2, y + 1, z, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x, y + 1, z + 2, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 2, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 2:
                    world.setBlock(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x - 1, y + 1, z, ExampleMod.sao_skill_block);
                    world.setBlock(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 1, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 3:
                    world.setBlock(x, y + 1, z - 2, ExampleMod.sao_skill_block);
                    world.setBlock(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x - 2, y + 1, z, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x, y + 1, z - 2, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 2, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 4:
                    world.setBlock(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 5:
                    world.setBlock(x, y + 1, z - 2, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x + 2, y + 1, z, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x, y + 1, z - 2, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 2, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 6:
                    world.setBlock(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 7:
                    world.setBlock(x, y + 1, z + 2, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.setBlock(x + 2, y + 1, z, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x, y + 1, z + 2, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 2, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    break;

            }

            }

        return super.onItemRightClick(stack, world, player);
    }
White3910
ID:b2e20161
木を殴ってる
 
記事: 20
登録日時: 2013年10月16日(水) 17:13

  • (PostNo.245287)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by defeatedcrow » 2015年8月30日(日) 13:21

>public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)

左クリックのメソッドになってないですよね
こういう場合は、エラーが出ている状態のソースを載せて頂いた方がアドバイスしやすいです

あと、これはJavaの基本的な話なんですが、
public ItemStack onItemRightClick
これは、メソッドの結果としてItemStackを返します。
良くあるケースはツール系で、メソッド内でItemStackのダメージをふやし(これは耐久値を減らすということです)
return 耐久値が減ったあとのItemStack とやります

余談
右クリックで使用すると全く別のItemStackが返される
とか
(IC2電力のように)耐久値の代わりに独自のゲージを消費する
のような処理も実装できます


で、swingの方ですが
public boolean onEntitySwing()
ですから、trueかfalseのbooleanを返すように書き換えないとエラーになります
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:bed7c33f
ラピスラズリ収集家
 
記事: 969
登録日時: 2014年1月08日(水) 13:48

  • (PostNo.245307)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by White3910 » 2015年8月30日(日) 14:44

ありがとうございます。わかりました。
では、onEntitySwing() { }
で試してみたコードを貼らせていただきます。

コード: 全て選択
    @Override
    public boolean onEntitySwing(ItemStack stack, World world, EntityPlayer player) {


        if (!world.isRemote) {
            int x = (int) Math.floor(player.posX);
            int y = (int) Math.floor(player.posY);
            int z = (int) Math.floor(player.posZ);
            int dir = MathHelper.floor_double((double) (player.rotationYaw * 8.0F / 360.0F) + 0.5D) & 7;
            world.playSound((double) x + 0.5, (double) y + 0.5, (double) z + 0.5, "examplemod:photonswing", 1.0f, 1.0f, false);


            switch (dir) {
                case 0:
                    world.setBlock(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.setBlock(x, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 1:
                    world.setBlock(x, y + 1, z + 2, ExampleMod.sao_skill_block);
                    world.setBlock(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.setBlock(x - 2, y + 1, z, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x, y + 1, z + 2, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 2, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 2:
                    world.setBlock(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x - 1, y + 1, z, ExampleMod.sao_skill_block);
                    world.setBlock(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 1, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 3:
                    world.setBlock(x, y + 1, z - 2, ExampleMod.sao_skill_block);
                    world.setBlock(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x - 2, y + 1, z, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x, y + 1, z - 2, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x - 2, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 4:
                    world.setBlock(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x - 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 5:
                    world.setBlock(x, y + 1, z - 2, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x + 2, y + 1, z, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x, y + 1, z - 2, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 2, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 6:
                    world.setBlock(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x + 1, y + 1, z - 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    break;
                case 7:
                    world.setBlock(x, y + 1, z + 2, ExampleMod.sao_skill_block);
                    world.setBlock(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.setBlock(x + 2, y + 1, z, ExampleMod.sao_skill_block);
                    world.scheduleBlockUpdate(x, y + 1, z + 2, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 1, y + 1, z + 1, ExampleMod.sao_skill_block, DURATION);
                    world.scheduleBlockUpdate(x + 2, y + 1, z, ExampleMod.sao_skill_block, DURATION);
                    break;

            }

            }

        return true;
    }
}


ちなみに、@Overrideがメソッドに使われていて、このコードの場合、これに赤線が引かれてしまいますが、この対処方法などを教えて頂けませんか?
やはり、私はJava初心者であるので、基本的な指摘をしていただければ助かります。
White3910
ID:b2e20161
木を殴ってる
 
記事: 20
登録日時: 2013年10月16日(水) 17:13

  • (PostNo.245308)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by White3910 » 2015年8月30日(日) 14:46

@override にカーソルを当てると、「Method does not override method from its superclass」
と言われます。 メソッドは、スーパークラスからのメソッドをオーバーライドしていない、ということですよね...?

ちなみに、@Overrideを消して、Runさせてみると、Minecraftが落ちることなどはありませんが、Modの働きが見られなくなってしまいます。
White3910
ID:b2e20161
木を殴ってる
 
記事: 20
登録日時: 2013年10月16日(水) 17:13

  • (PostNo.245318)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by defeatedcrow » 2015年8月30日(日) 16:18

ForgeのVerによってメソッド名が変わっているとか、()内の引数が変わっているのはよくあることなので、
それがでるようなら、
Item.classにある同名または同様のメソッドを探してそれを使って下さい。
(私は開発環境の都合上、1291以外のメソッド名については答えられませんので。)
func_XXX~みたいな名前に変わっていることもたまにあります
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:bed7c33f
ラピスラズリ収集家
 
記事: 969
登録日時: 2014年1月08日(水) 13:48

  • (PostNo.245332)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by White3910 » 2015年8月30日(日) 17:31

defeatedcrowさん、度々ありがとうございます!
言い忘れていましたが、私もver1291を使っているので、同じだと思います^^
そして、わかってきたことがあります。
boolean onEntitySwing()の引数は、EntityLivingBaseとItemstackのみでした。
そう考えると、上記のworldクラスが多くを占めているコードは実現可能なのでしょうか?...
White3910
ID:b2e20161
木を殴ってる
 
記事: 20
登録日時: 2013年10月16日(水) 17:13

  • (PostNo.245337)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by defeatedcrow » 2015年8月30日(日) 17:43

White3910 さんが書きました:defeatedcrowさん、度々ありがとうございます!
言い忘れていましたが、私もver1291を使っているので、同じだと思います^^
そして、わかってきたことがあります。
boolean onEntitySwing()の引数は、EntityLivingBaseとItemstackのみでした。
そう考えると、上記のworldクラスが多くを占めているコードは実現可能なのでしょうか?...


Worldや座標はEntityからとれます

と、最初に書きましたが…
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:bed7c33f
ラピスラズリ収集家
 
記事: 969
登録日時: 2014年1月08日(水) 13:48

  • (PostNo.245361)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by White3910 » 2015年8月30日(日) 20:02

同じことを質問してしまったようですみません(汗)
ブロックを設置するにあたって、やはりworld.setBlock()は必要になってくると思いますが、別のメソッドとしてonEntitySwingを定義して呼び出すにしても、引数のところでエラーが吐かれたりして、私の場合困ってしまいます...
Modを作り始めたばかりの初心者で、はずれたことを言っているかもしれませんが、お願いしますm(_ _)m

コード: 全て選択
    @Override
    public boolean onEntitySwing (EntityLivingBase entity, ItemStack stack) {
        onItemRightClick(stack)
        return true;
    }

    @Override
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {


        if (!world.isRemote) {
            int x = (int) Math.floor(player.posX);
            int y = (int) Math.floor(player.posY);
            int z = (int) Math.floor(player.posZ);
            int dir = MathHelper.floor_double((double) (player.rotationYaw * 8.0F / 360.0F) + 0.5D) & 7;
            world.playSound((double) x + 0.5, (double) y + 0.5, (double) z + 0.5, "examplemod:photonswing", 1.0f, 1.0f, false);


            switch (dir) {
                case 0:
                    world.setBlock(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.setBlock(......
White3910
ID:b2e20161
木を殴ってる
 
記事: 20
登録日時: 2013年10月16日(水) 17:13

  • (PostNo.245365)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by elise_blacklab » 2015年8月30日(日) 20:31

異なるメソッドから同じ処理を行うような場合、実際にやりたい処理をさらに別のメソッドに定義して書いておくと良いでしょう。
引数のWorldや座標はdefeatedcrow氏の仰る通りEntityから取得できるので、必要に応じて足すなり削るなりしてくださいとしか。

あとあまり「初心者」という言葉を使うとどこまでサポートしなければならないのか分かりかねるのでほどほどにしたほうが良いと思います。ここはMinecraftのフォーラムであって、Java自体に関する解説はあまりすべきではないので。
カテゴリの性質上、回答者としてもある程度の知識は身についている前提で話すことが多いです。
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:fb908fb3
掘り廃人
 
記事: 2456
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.245443)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by White3910 » 2015年8月31日(月) 16:02

出来るだけ頑張ってみます。

言われてみれば、そうですよね^^;
以後気をつけます!
White3910
ID:39272d4b
木を殴ってる
 
記事: 20
登録日時: 2013年10月16日(水) 17:13

  • (PostNo.245473)

Re: [1.7.10 Forge] アイテムの左クリックイベントについて

投稿記事by defeatedcrow » 2015年8月31日(月) 19:41

White3910 さんが書きました:同じことを質問してしまったようですみません(汗)
ブロックを設置するにあたって、やはりworld.setBlock()は必要になってくると思いますが、別のメソッドとしてonEntitySwingを定義して呼び出すにしても、引数のところでエラーが吐かれたりして、私の場合困ってしまいます...
Modを作り始めたばかりの初心者で、はずれたことを言っているかもしれませんが、お願いしますm(_ _)m

コード: 全て選択
    @Override
    public boolean onEntitySwing (EntityLivingBase entity, ItemStack stack) {
        onItemRightClick(stack)
        return true;
    }

    @Override
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {


        if (!world.isRemote) {
            int x = (int) Math.floor(player.posX);
            int y = (int) Math.floor(player.posY);
            int z = (int) Math.floor(player.posZ);
            int dir = MathHelper.floor_double((double) (player.rotationYaw * 8.0F / 360.0F) + 0.5D) & 7;
            world.playSound((double) x + 0.5, (double) y + 0.5, (double) z + 0.5, "examplemod:photonswing", 1.0f, 1.0f, false);


            switch (dir) {
                case 0:
                    world.setBlock(x - 1, y + 1, z + 1, ExampleMod.sao_skill_block);
                    world.setBlock(......


出来ないはずはないでしょう…
あなたは「初心者」と仰るが、あなたが作ったものとして提示されているあなたのソースは初心者のものには見えませんし、
というか、そもそも私が言っていることを既にあなたはご自分のソース内でやってるんです。

ですから私は、あなたのソースから垣間見える習熟度を見越した上でお話ししています。
Entityからworldも取れない人が書ける内容じゃないですから。


なので、おそらく”方法は知っているけど「取得する」というワードがピンとこない”のかもしれませんね。
でしたら、
あなたが既にやっている、
EntityPlayerのインスタンス(player)からあなたがposX~ZやrotationYawを取ってきて計算に使用しているのと全く同じように、
インスタンスから「worldObj」ってのを取って使ってみて下さい。

このworldObjはworldと同じように使えますから。
既に出来ている方法と同じやり方ですから、全く難しい方法ではないはずです。


追記:EntityLivingBaseについて

EntitySwingの場合、EntityLiving(敵モブなど。プレイヤーではないが、手持ちや装備スロットを持っています。)が振る可能性もあるので、
EntityPlayerではなく、EntityLivingBaseになっています。
EntityLivingBaseは、HPゲージを持っていて生きているEntityの共通クラスです。
そのまま使えば、敵モブなどがアイテムを振った時にも呼ばれて、あなたが作った処理を起こします。

プレイヤーのみの効果にしたいとか、Entityの種類によって処理を変えたいのであれば、
if (entity instanceof EntityPlayer){
}
このような判定分を挟んで、entityがEntityPlayerであるかどうかチェックを挟むと良いです。
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:bed7c33f
ラピスラズリ収集家
 
記事: 969
登録日時: 2014年1月08日(水) 13:48


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

x