Помогите Как дать EntityPlayer предмет в руку?

EnderBro3D

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
EnderBro3D
Доброго времени суток, форумчане.

Дело в том что у меня не работает функция:
npc.getItemInMainHand().setItem(Item.getById(1));
Пишет в консоль вот это:
Код:
[21:10:49 INFO]: EnderBro3D issued server command: /servernpc notch 1
[21:10:49 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'servernpc' in plugin LobbyXCore v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[core.jar:git-Spigot-4af49dc-c5e9a16]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[core.jar:git-Spigot-4af49dc-c5e9a16]
        at org.bukkit.craftbukkit.v1_9_R2.CraftServer.dispatchCommand(CraftServer.java:645) ~[core.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.PlayerConnection.handleCommand(PlayerConnection.java:1349) [core.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.PlayerConnection.a(PlayerConnection.java:1184) [core.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.PacketPlayInChat.a(PacketPlayInChat.java:45) [core.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.PacketPlayInChat.a(PacketPlayInChat.java:1) [core.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.PlayerConnectionUtils$1.run(SourceFile:13) [core.jar:git-Spigot-4af49dc-c5e9a16]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_111]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_111]
        at net.minecraft.server.v1_9_R2.SystemUtils.a(SourceFile:45) [core.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.MinecraftServer.D(MinecraftServer.java:726) [core.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.DedicatedServer.D(DedicatedServer.java:399) [core.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.MinecraftServer.C(MinecraftServer.java:665) [core.jar:git-Spigot-4af49dc-c5e9a16]
        at net.minecraft.server.v1_9_R2.MinecraftServer.run(MinecraftServer.java:564) [core.jar:git-Spigot-4af49dc-c5e9a16]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_111]
Caused by: java.lang.NullPointerException
        at ru.EnderBro3D.lobbycore.LobbyCore.onCommand(LobbyCore.java:126) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[core.jar:git-Spigot-4af49dc-c5e9a16]
        ... 15 more
>

Код который я пишу:
Java:
Player c = (Player) sender;
            MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
            WorldServer world = ((CraftWorld) Bukkit.getServer().getWorlds().get(0)).getHandle();
            GameProfile profile = new GameProfile(UUID.randomUUID(), ChatColor.translateAlternateColorCodes('&', args[0]));
           
            EntityPlayer npc = new EntityPlayer(server, world, profile, new PlayerInteractManager(world));
            npc.teleportTo(c.getLocation(), false);
            PlayerConnection connection = ((CraftPlayer) c).getHandle().playerConnection;
            connection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, npc));
            connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
            connection.sendPacket(new PacketPlayOutTitle(EnumTitleAction.TITLE, ChatSerializer.a("{\"text\":\"Новый NCP создан!\"}")));
           
            npc.getItemInMainHand().setItem(Item.getById(Integer.parseInt(args[1])));
Java:
package ru.EnderBro3D.lobbycore;

import java.io.File;
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.craftbukkit.v1_9_R2.CraftServer;
import org.bukkit.craftbukkit.v1_9_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler;

import com.mojang.authlib.GameProfile;

import net.milkbowl.vault.economy.Economy;
import net.minecraft.server.v1_9_R2.EntityPlayer;
import net.minecraft.server.v1_9_R2.IChatBaseComponent.ChatSerializer;
import net.minecraft.server.v1_9_R2.Item;
import net.minecraft.server.v1_9_R2.MinecraftServer;
import net.minecraft.server.v1_9_R2.PacketPlayOutNamedEntitySpawn;
import net.minecraft.server.v1_9_R2.PacketPlayOutPlayerInfo;
import net.minecraft.server.v1_9_R2.PacketPlayOutPlayerInfo.EnumPlayerInfoAction;
import net.minecraft.server.v1_9_R2.PacketPlayOutTitle;
import net.minecraft.server.v1_9_R2.PacketPlayOutTitle.EnumTitleAction;
import net.minecraft.server.v1_9_R2.PlayerConnection;
import net.minecraft.server.v1_9_R2.PlayerInteractManager;
import net.minecraft.server.v1_9_R2.WorldServer;

public class LobbyCore extends JavaPlugin implements Listener {
   
    private static Economy econ = null;
    private static int task;
    private static YamlConfiguration config;
    private LobbyCoreAPI api;
   
    public static Economy getEcon() {
        return econ;
    }
   
    private boolean setupEconomy()
    {
        RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
        if (economyProvider != null) {
            econ = economyProvider.getProvider();
        }

        return (econ != null);
    }
   
    //OnEnable
    @Override
    public void onEnable() {
        api = new LobbyCoreAPI();
        if(setupEconomy() == false) {
            getLogger().severe("Please setup a economy plugin!");
            return;
        }
       
        PluginManager pm = Bukkit.getPluginManager();
        pm.registerEvents(new EventListener(), this);
       
       
        BukkitScheduler s = Bukkit.getScheduler();
        long interval = 10 * 20;
        task = s.scheduleSyncRepeatingTask(this, new Runnable() {

            @Override
            public void run() {
                if(Bukkit.getOnlinePlayers()==null) return;
                for(Player player:Bukkit.getOnlinePlayers()) {
                    api.setScoreboard(player);
                }
               
            }
           
        }, 0L, interval);
       
        File cfgFile = new File(getDataFolder(), "config.yml");
        if(cfgFile.exists()) config.options().copyDefaults(true);
    }
   
    //OnDisable
    @Override
    public void onDisable() {
        BukkitScheduler s = Bukkit.getScheduler();
        s.cancelTask(task);
    }
   
    //OnCommand
    @SuppressWarnings("deprecation")
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(cmd.getName().equalsIgnoreCase("ServerNPC")) {
            if(!sender.hasPermission("LobbyCore.ServerNPC")) {
                sender.sendMessage("\u00a7cНедостаточно прав!");
                return false;
            }
            if(args.length != 2) {
                sender.sendMessage("\u00a7cНедостаточно аргументов: <name> <ItemID>!");
                return false;
            }
            if(!(sender instanceof Player)) {
                sender.sendMessage("\u00a7cТолько для игроков!");
                return false;
            }
            Player c = (Player) sender;
            MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
            WorldServer world = ((CraftWorld) Bukkit.getServer().getWorlds().get(0)).getHandle();
            GameProfile profile = new GameProfile(UUID.randomUUID(), ChatColor.translateAlternateColorCodes('&', args[0]));
           
            EntityPlayer npc = new EntityPlayer(server, world, profile, new PlayerInteractManager(world));
            npc.teleportTo(c.getLocation(), false);
            PlayerConnection connection = ((CraftPlayer) c).getHandle().playerConnection;
            connection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, npc));
            connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
            connection.sendPacket(new PacketPlayOutTitle(EnumTitleAction.TITLE, ChatSerializer.a("{\"text\":\"Новый NCP создан!\"}")));
           
            npc.getItemInMainHand().setItem(Item.getById(Integer.parseInt(args[1])));
        }
        return false;
    }
   
   
}
P.S
В net.minecraft.server я первый раз, чаще я в org.bukkit, так что я могу очень много сделать ошибок

2017-02-07_22.23.23.png
 
ошибки то читать еще не научился?

Код:
Caused by: java.lang.NullPointerException
        at ru.EnderBro3D.lobbycore.LobbyCore.onCommand(LobbyCore.java:126) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[core.jar:git-Spigot-4af49dc-c5e9a16]
        ... 15 more

Caused by: java.lang.NullPointerException - причина ошибки. (где то что то null и ты пытаешься работать с объектом null)
at ru.EnderBro3D.lobbycore.LobbyCore.onCommand(LobbyCore.java:126) - где произошла ошибка. в данном случае на 126 строке класса LobbyCore, который лежит в пакете ru.EnderBro3D.lobbycore
 
ошибки то читать еще не научился?

Код:
Caused by: java.lang.NullPointerException
        at ru.EnderBro3D.lobbycore.LobbyCore.onCommand(LobbyCore.java:126) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[core.jar:git-Spigot-4af49dc-c5e9a16]
        ... 15 more

Caused by: java.lang.NullPointerException - причина ошибки. (где то что то null и ты пытаешься работать с объектом null)
at ru.EnderBro3D.lobbycore.LobbyCore.onCommand(LobbyCore.java:126) - где произошла ошибка. в данном случае на 126 строке класса LobbyCore, который лежит в пакете ru.EnderBro3D.lobbycore
Ну так в этом: npc.getItemInMainHand().setItem(Item.getById(Integer.parseInt(args[1]))); и ошибка .-.
Ну так в этом: npc.getItemInMainHand().setItem(Item.getById(Integer.parseInt(args[1]))); и ошибка .-.
Я менял на 1 вместо Integer.parseInt
Всё тоже
 
Ну так в этом: npc.getItemInMainHand().setItem(Item.getById(Integer.parseInt(args[1]))); и ошибка .-.

Я менял на 1 вместо Integer.parseInt
Всё тоже
Ты уверен что твой аргс[1] не нулл?
А нпс?

Увидел импорты кб и нмс и словил инсульт.
Умер.
 
Сначала ставь итем через .inventory...
А потом непися спавнь
 
Код:
EntityPlayer npc = new EntityPlayer(server, world, profile, new PlayerInteractManager(world));
            npc.teleportTo(c.getLocation(), false);
            PlayerConnection connection = ((CraftPlayer) c).getHandle().playerConnection;
           
            CraftPlayer player = (CraftPlayer) npc.getBukkitEntity();
            for(int slot = 0; slot < player.getInventory().getSize();) {
                player.getInventory().setItem(slot, new ItemStack(Integer.parseInt(args[1])));
                slot++;
            }
            player.setItemInHand(new ItemStack(Integer.parseInt(args[1])));
            connection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, npc));
            connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
            connection.sendPacket(new PacketPlayOutTitle(EnumTitleAction.TITLE, ChatSerializer.a("{\"text\":\"Новый NCP создан!\"}")));
?
 
Код:
EntityPlayer npc = new EntityPlayer(server, world, profile, new PlayerInteractManager(world));
            npc.teleportTo(c.getLocation(), false);
            PlayerConnection connection = ((CraftPlayer) c).getHandle().playerConnection;
         
            CraftPlayer player = (CraftPlayer) npc.getBukkitEntity();
            for(int slot = 0; slot < player.getInventory().getSize();) {
                player.getInventory().setItem(slot, new ItemStack(Integer.parseInt(args[1])));
                slot++;
            }
            player.setItemInHand(new ItemStack(Integer.parseInt(args[1])));
            connection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, npc));
            connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
            connection.sendPacket(new PacketPlayOutTitle(EnumTitleAction.TITLE, ChatSerializer.a("{\"text\":\"Новый NCP создан!\"}")));
?
Неписю ставь итем, а не игроку
 
Не работает :c
Может тут в чём-то ошибка:

Код:
  @SuppressWarnings("deprecation")
    public void spawnNPC(Player spawner,     String name, int withItem) {
        ItemStack item = new ItemStack(Material.getMaterial(withItem));
       
        MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
        WorldServer world = ((CraftWorld) Bukkit.getServer().getWorlds().get(0)).getHandle();
        GameProfile profile = new GameProfile(UUID.randomUUID(), ChatColor.translateAlternateColorCodes('&', name));
       
        EntityPlayer npc = new EntityPlayer(server, world, profile, new PlayerInteractManager(world));
        npc.teleportTo(spawner.getLocation(), false);
        PlayerConnection connection = ((CraftPlayer) spawner).getHandle().playerConnection;
       
        CraftPlayer player = (CraftPlayer) npc.getBukkitEntity();
        for(int slot = 0; slot < player.getInventory().getSize();) {
            npc.inventory.setItem(slot, CraftItemStack.asNMSCopy(item));
            slot++;
        }
        npc.inventory.setItem(npc.inventory.itemInHandIndex, CraftItemStack.asNMSCopy(item));
        npc.setEquipment(EnumItemSlot.OFFHAND, npc.inventory.getItem(1));
       
        connection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, npc));
        connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
        connection.sendPacket(new PacketPlayOutTitle(EnumTitleAction.TITLE, ChatSerializer.a("{\"text\":\"Новый NCP создан!\"}")));
        connection.sendPacket(new PacketPlayOutEntityEquipment(0, EnumItemSlot.OFFHAND, npc.inventory.getItem(1)));
       
        spawner.openInventory(player.getInventory());
    }
, а не в спавне ентити?
P,S Заполнял весь инв ентити для того чтобы поставить предмет в руку, вдруг он выбрал не 1 слот а 5 например :D
 
Назад
Верх