1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем EnderBro3D, 7 фев 2017.

  1. Автор темы
    EnderBro3D

    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
    >
    
    Код который я пишу:
    Код:
    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])));
    Код:
    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
    2017-02-07_22.23.23.png
     
  2. Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    ошибки то читать еще не научился?

    Код:
    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
     
  3. Автор темы
    EnderBro3D

    EnderBro3D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Ну так в этом: npc.getItemInMainHand().setItem(Item.getById(Integer.parseInt(args[1]))); и ошибка .-.
    Я менял на 1 вместо Integer.parseInt
    Всё тоже
     
  4. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Ты уверен что твой аргс[1] не нулл?
    А нпс?

    Увидел импорты кб и нмс и словил инсульт.
    Умер.
     
  5. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    есть же вроде просто метод
    setItemIn...
     
  6. Автор темы
    EnderBro3D

    EnderBro3D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Ошибку теперь не выдаёт, не ставится предмет. Заполнял инв, ставил в руку, во вторую. Всё тоже.
    Мб это какой-то пакет?
     
  7. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Сначала ставь итем через .inventory...
    А потом непися спавнь
     
  8. Автор темы
    EnderBro3D

    EnderBro3D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Код:
    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 создан!\"}")));
    ?
     
  9. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Неписю ставь итем, а не игроку
     
  10. Автор темы
    EnderBro3D

    EnderBro3D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    npc.inventory.getItemInHand().setItem(Item.getById(1)); ?
     
  11. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Попробуй
     
  12. Автор темы
    EnderBro3D

    EnderBro3D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Не работает :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
     

Поделиться этой страницей