2017-01-03 7 views
1

minecraft 서버를 프로그래밍하려고하지만 EntityPlayer 클래스에서 getCurrentActiveItem (또는 이와 비슷한) 메서드에 액세스해야합니다. 이 작업을 수행해야하는 이유는 플레이어가 물건을 치유하는 것과 같은 일을하는 것입니다. 문제는, 아무것도 정적입니다. 나는 Youth Digital이라는 프로그램에서 코드하는 법을 배웠고, 저에게 만들어지지 않은 코드를 편집하는 것을 허용하지 않기 때문에이 방법에 정적을 넣을 수는 없습니다. 나는 약간의 조사를했고 꽤 구체적인 답변을 발견했다. 그들은 클래스의 새로운 인스턴스를 만드는 것에 관한 것입니다. 코드에 넣으면 오류가 발생합니다. 나는 이와 같은 것을 시도했다.클래스에서 EntityPlayer 메서드를 참조하는 방법

EntityPlayer player = new EntityPlayer.class; 
public class player = new EntityPlayer.class; 
class player = player.instanceOf("EntityPlayer.class"); 

및 기타 유사한 내용 모두는 나에게 해독하기에 충분하지 않다는 오류를 주었다.

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

좋아, 정적이기 때문에 액세스 할 수없는 것을 언급하고 있습니다.

문제는 정적 인 방법으로 액세스하지 말아야한다는 것입니다.

player.getItemInHand()은 개체에서 액세스해야하는 메서드이므로 정적 손이 아닌 player의 손에있는 ItemStack을 반환합니다 (개체가 없으므로 아무도 없습니다!).

당신은 어떻게해야하나요 :

  1. 먼저, 그리고 더 중요한 : 당신은 NEVER 새로운 통해 새로운 선수를 만들어야합니다. Player는 Bukkit에서 만든 개체이므로 새로운 플레이어를 만들지 않아야합니다.
  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'와 같은 공용 메소드에 액세스하려면 클래스의 실제 인스턴스 (게임의 플레이어)에 액세스해야합니다. –

+0

외부 링크로 연결하는 대신 해당 메서드를 사용하는 방법에 대한 설명이 설명되어 있어야합니다. – Kerooker