java—如何在类中引用entityplayer方法

lvjbypge  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(461)

我试图编写一个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() {

  }

}
b5buobof

b5buobof1#

好吧,你提到了你不能访问的东西,因为它是静态的。
问题是,您不应该以静态方式访问它! player.getItemInHand() 是必须从对象访问的方法,因此它返回 player ,而不是静态的(不属于任何对象,因此不属于任何人!)。
你应该做什么:
首先,也是更重要的一点:你不应该通过new创建一个新的播放器。玩家是bukkit创建的对象,你不应该尝试创建自己的新玩家。
你应该通过陈述你想找的玩家是谁来找到你的玩家:
以玩家的名字获取玩家手中的物品堆栈

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!

您很可能希望从事件中检测到手头的项目,例如,当您用棍子单击时,会产生一只鸡:
(请参阅bukkit事件处理文档以了解更多的事件处理知识)

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

1sbrub3j2#

getItemInHand 关于人的实体。bukkit javadocs公司

相关问题