如何在 class 中引用 EntityPlayer 方法
How to reference an EntityPlayer method in a class
我正在尝试编写我的世界服务器程序,但我需要从 EntityPlayer class 访问 getCurrentActiveItem(或类似的东西)方法。需要这样做的原因是让手头的物品做一些事情,比如治疗玩家或其他事情。问题是,没有什么是静态的。 我是从一个叫做 youth Digital 的程序学习编码的,他们不允许我编辑任何不是我创建的代码,所以我不能只需将静态放在这个方法上。我做了一些研究并找到了一些非常具体的答案。我猜他们是关于制作 class 的新实例。把它放在代码中只会给我一个错误。我试过这样的东西:
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() {
}
}
HumanEntity 上有 getItemInHand
。 Bukkit JavaDocs
好的,您提到的是您无法访问的内容,因为它是静态的。
问题是,您不应该以静态方式访问它!
player.getItemInHand()
是必须从对象访问的方法,所以returnsplayer
手上的ItemStack,不是静态手上的(属于没有对象,因此没有人!)。
你应该做什么:
- 首先,也是更重要的一点:您应该绝不通过 new 创建新播放器。
Player 是由 Bukkit 创建的一个对象,你不应该尝试创建你自己的新 Player。
- 您应该通过在 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();
}
我正在尝试编写我的世界服务器程序,但我需要从 EntityPlayer class 访问 getCurrentActiveItem(或类似的东西)方法。需要这样做的原因是让手头的物品做一些事情,比如治疗玩家或其他事情。问题是,没有什么是静态的。 我是从一个叫做 youth Digital 的程序学习编码的,他们不允许我编辑任何不是我创建的代码,所以我不能只需将静态放在这个方法上。我做了一些研究并找到了一些非常具体的答案。我猜他们是关于制作 class 的新实例。把它放在代码中只会给我一个错误。我试过这样的东西:
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() {
}
}
HumanEntity 上有 getItemInHand
。 Bukkit JavaDocs
好的,您提到的是您无法访问的内容,因为它是静态的。
问题是,您不应该以静态方式访问它!
player.getItemInHand()
是必须从对象访问的方法,所以returnsplayer
手上的ItemStack,不是静态手上的(属于没有对象,因此没有人!)。
你应该做什么:
- 首先,也是更重要的一点:您应该绝不通过 new 创建新播放器。 Player 是由 Bukkit 创建的一个对象,你不应该尝试创建你自己的新 Player。
- 您应该通过在 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();
}