如何在类中引用EntityPlayer方法

时间:2017-01-03 15:00:20

标签: java entity static-methods bukkit

我正在尝试编写一个Minecraft服务器,但我需要从EntityPlayer类访问getCurrentActiveItem(或类似的东西)方法。需要这样做的原因是让一个项目在做一些像治疗玩家或其他什么的东西。问题是,没有什么是静态的。我从一个名为youth Digital的程序中学习编码,他们不允许我编辑任何非我创建的代码,所以我不能只是静态这个方法。我做了一些研究,发现了一些非常具体的答案。我猜他们是关于创建一个新类的实例。将它放在代码中只会给我一个错误。我尝试过这样的东西:

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() {

  }

}

2 个答案:

答案 0 :(得分:1)

好的,你提到你无法访问的内容,因为它是静态的。

问题是,你不应该以静态方式访问它!

player.getItemInHand()是一个必须从对象访问的方法,因此它返回player手中的ItemStack,而不是静态手(不属于任何对象,因此没有人) !)。

你应该做什么:

  1. 首先,更重要的是:你应该从不通过new创建一个新玩家。 玩家是Bukkit创建的对象,你不应该尝试创建自己的新玩家。
  2. 你应该通过说明你想要获得bukkit的玩家来获得你的玩家:
  3. 通过玩家的名字将玩家手中的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 :(得分:-1)

HumanEntity上有getItemInHandBukkit JavaDocs