2017-01-03 5 views
1

Я пытаюсь запрограммировать сервер minecraft, но мне нужно получить доступ к методу getCurrentActiveItem (или что-то вроде этого) из класса EntityPlayer. Причина, по которой нужно сделать это, - это иметь предмет в руке, делать что-то вроде исцеления игрока или чего-то еще. Проблема в том, что Ничего не статично. Я научился программировать из программы под названием 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

Итак, вы пытаетесь получить активный предмет из руки игрока в Буките. Это так? – Kerooker

+0

есть. Это то, что я пытаюсь сделать. – Ptolemy2002

+1

Это * не * JavaScript. – Moira

ответ

1

Хорошо, вы упоминаете, к чему вы не можете получить доступ, потому что это статично.

Дело в том, что вы не должны обращаться к нему статическим способом!

player.getItemInHand() - метод, к которому должен быть обращен доступ к объекту, поэтому он возвращает ItemStack, который находится в руке player, а не статической рукой (не принадлежит ни одному объекту, поэтому никто!).

Что вы должны сделать:

  1. Во-первых, и что более важно: Вы должны NEVER создать новый плеер с помощью нового. 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

Существует getItemInHand на HumanEntity. Bukkit JavaDocs

+0

Дело в том, что я не могу ссылаться на него, потому что он не является статичным. – Ptolemy2002

+0

Вы не хотите получать доступ к статическому методу, когда говорите о получении текущего элемента сущности в игре. Статические элементы и переменные предназначены для таких вещей, как регистраторы классов или константы (т. Е. Math.PI). Вы должны иметь доступ к фактическому экземпляру класса (игроку в игре) для доступа к его общедоступным методам, таким как 'getItemInHand'. –

+0

Ответ должен объяснить, как использовать метод вместо ссылки на внешнюю ссылку – Kerooker

Смежные вопросы