2017-01-03 10 views
1

私はミニクラフトサーバーをプログラミングしようとしていますが、EntityPlayerクラスからgetCurrentActiveItem(またはそのような)メソッドにアクセスする必要があります。これを行う必要がある理由は、アイテムを手元に置くことが、プレイヤーや何かを癒すようなことをするためです。問題は、何も静的ではありません。私はyouth Digitalというプログラムからコードを学びました。私の作成していないコードを編集することはできないので、このメソッドに静的なコードを置くことはできません。私はいくつかの研究を行い、かなり具体的な答えを見つけました。彼らはクラスの新しいインスタンスを作ろうとしていたと思います。コードに入れるだけでエラーになります。私はこのようなものを試しました:クラス内のEntityPlayerメソッドを参照する方法

と他の同様のもの。すべて私は私に解読するほど十分に進んでいないという誤りを私に与えた。ここに私のコードです:

package myservermod; 

import com.youthdigital.servermod.game.*; 

public class Player extends PlayerData { 

    public Player(EntityPlayer parPlayerObject) { 
    super(parPlayerObject); 
    } 

    @Override 
    public void onUpdate() { 
/*Cheats*/ 
    //Teleport Cheat 
    if(Conditions.cheatEntered("teleport")){ 
    Actions.teleportPlayers(GameManager.getStringFromCheat(1)); 
    } 
/*Red Team*/ 
    //Enter the Red Team 
    if(Conditions.didRightClickBlock("redTeamEntrance")){ 
    Actions.teleportPlayers("redTeamBase"); 
    } 
    if(Conditions.didRightClickBlock("dirtBlockBuy")){ 
     Actions.setBlockWithMetaAtPos("redDirtButton" , Blocks.stone_button, 3); 
    } 
    } 

    @Override 
    public void onJoinedServer(){ 
    Actions.teleportPlayers("lobby"); 
    } 

    @Override 
    public void onStartGame() { 

    } 

    @Override 
    public void onResetGameToLobby() { 
    Actions.teleportPlayers("lobby"); 
    } 

    @Override 
    public void onRespawned() { 

    } 

} 
+0

したがって、あなたはBukkitのプレーヤーの手からアクティブなアイテムを取得しようとしています。これでしょうか? – Kerooker

+0

はい。それが私がやろうとしていることです。 – Ptolemy2002

+1

これはJavaScriptではありません。 – Moira

答えて

1

[OK]をクリックすると、静的であるためアクセスできないものが表示されます。

問題は静的な方法でアクセスしないことです。

player.getItemInHand()はオブジェクトからアクセスする必要があるメソッドであるため、静的な手ではなくplayerの手にあるItemStackを返します(オブジェクトがないため、誰にも属しません)。あなたは何をすべき

  1. まず、そしてより重要:あなたは新しい経由で新しいプレーヤーを作成することはありません。 PlayerはBukkitによって作成されたオブジェクトです。あなた自身の新しいPlayerを作成しようとするべきではありません。
  2. あなたがbukkitに取得したい選手だ人示すことによって、あなたのプレーヤーを取得する必要があります:

プレイヤーの手でItemStackを取得するには、プレイヤーの名前で

Player player = Bukkit.getPlayer("YourPlayer"); //Notice that the method getPlayer() is static to Bukkit! 
ItemStack item = player.getItemInHand(); //Notice that you're accessing your object player, not creating a completely new one, and not accessing it statically! 

をあなたはほとんどそうしたいですスティックでクリックするとチキンを鳴らすなどのイベントから手持ちのアイテムを検出します。

(さらなるイベント処理の知識についてはthe bukkit event handling documentationを参照してください)

@EventHandler 
public void onPlayerInteract(PlayerInteractEvent event) { 
    Player player = event.getPlayer(); 
    ItemStack is = player.getItemInHand(); 
} 
-1

HumanEntityにはgetItemInHandがあります。 Bukkit JavaDocs

+0

静的ではないので、私はそれを参照することができないということです。 – Ptolemy2002

+0

ゲーム内のエンティティの現在のアイテムを取得することについて話しているときは、静的メソッドにアクセスしたくないでしょう。静的メンバーおよび変数は、クラスロガーまたは定数(つまり、Math.PI)などのものです。 'getItemInHand'のようなpublicメソッドにアクセスするには、クラスの実際のインスタンス(ゲーム中のプレイヤー)にアクセスする必要があります。 –

+0

外部リンクにリンクする代わりにメソッドを使用する方法を説明する必要があります – Kerooker

関連する問題