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

Помогите Ошибка: "Unhandled exception executing command". "null". Подробнее внутри.

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

Статус темы:
Закрыта.
  1. Автор темы
    VirtualGuys

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

    Баллы:
    61
    Добрый день! Я новичок в разработке плагинов, и пишу свой первый плагин. Наверное, это самый простой плагин который можно придумать, он добавляет в игру конфеты. Но пытаясь осуществить команду для которая выдаёт конфеты, столкнулся с ошибкой в консоли.
    Команда "give":
    Код:
    package sweets;
    
    import java.util.ArrayList;
    
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.*********ventory.meta.ItemMeta;
    
    import net.md_5.bungee.api.ChatColor;
    
    public class SGive implements CommandExecutor {
    
        @SuppressWarnings("unused")
        private mainClass plugin;
        private Handler handler;
    
        public SGive(mainClass plugin) {
            this.plugin = plugin;
        }
        
        public SGive(Handler handler) {
            this.handler = handler; //Получаю все переменные из класса Handler
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            Player player = (Player) sender; //Получаю игрока
            if(args.length == 0) { //Если нет аргументов
                return false;
            } else if(args.length == 1) { //Если один аргумент
                switch (args[0].toLowerCase()) { //Проверяю первый аргумент
                case "ocelot": //Если аргумент, это "ocelot", то...
                    ItemMeta ocemeta = handler.ocesweet.getItemMeta(); //Получаю мета из конфеты
                    ocemeta.setDisplayName(ChatColor.YELLOW + "" + ChatColor.BOLD + "Конфета Оцелота"); //Устанавливаю название
                    ArrayList<String> lore = new ArrayList<String>(); //Создаю описание
                    lore.add(ChatColor.GOLD + "" + ChatColor.BOLD + "Вам не хватает скорости?");
                    lore.add(ChatColor.DARK_PURPLE + "" + ChatColor.BOLD + "Конфета Оцелота уже на месте!");
                    lore.add(ChatColor.GOLD + "" + ChatColor.BOLD + "Съешьте эту вкусную конфету,");
                    lore.add(ChatColor.DARK_PURPLE + "" + ChatColor.BOLD + "и станете самым быстрым!");
                    ocemeta.setLore(lore); //Устанавливаю описание
                    handler.ocesweet.setItemMeta(ocemeta); //Применяю мета
                    player.getInventory().addItem(handler.ocesweet); //Выдаю предмет
                    break;
                default: //Ситуация, если первый аргумент не совпал ни с одним названием
                    sender.sendMessage(ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "Неверное название конфеты");
                }
            }
            return true; //Конец
        }
    
    }
    
    Handler:
    Код:
    ItemStack ocesweet = new ItemStack(Material.BAKED_POTATO) //Создаю конфету;
    Код:
    public void onSweetEat(PlayerItemConsumeEvent i) {
            Player r = i.getPlayer(); //Получаю игрока
            PotionEffectType heal = PotionEffectType.REGENERATION; //Эффекты для конфет
            PotionEffectType strong = PotionEffectType.INCREASE_DAMAGE;
            PotionEffectType speed = PotionEffectType.SPEED;
            PotionEffectType jump = PotionEffectType.JUMP;
            PotionEffectType fire = PotionEffectType.FIRE_RESISTANCE;
            PotionEffectType water = PotionEffectType.WATER_BREATHING;
    Код:
    if(i.getItem().equals(ocesweet)) { //Эффекты при съедании этой конфеты
                r.addPotionEffect(new PotionEffect(speed, 3600, 2));
                return;
            }
    Код:
    if(l instanceof Ocelot) { //Та же самая конфета, но не по команде, а при убийстве оцелота
                ItemMeta ocemeta = ocesweet.getItemMeta();
                ocemeta.setDisplayName(ChatColor.YELLOW + "" + ChatColor.BOLD + "Конфета Оцелота");
                ArrayList<String> lore = new ArrayList<String>();
                lore.add(ChatColor.GOLD + "" + ChatColor.BOLD + "Вам не хватает скорости?");
                lore.add(ChatColor.DARK_PURPLE + "" + ChatColor.BOLD + "Конфета Оцелота уже на месте!");
                lore.add(ChatColor.GOLD + "" + ChatColor.BOLD + "Съешьте эту вкусную конфету,");
                lore.add(ChatColor.DARK_PURPLE + "" + ChatColor.BOLD + "и станете самым быстрым!");
                ocemeta.setLore(lore);
                ocesweet.setItemMeta(ocemeta);
                l.getLocation().getWorld().dropItem(l.getLocation(), ocesweet);
            }
    Ошибка в логах:
    Код:
    null
    org.bukkit.command.CommandException: Unhandled exception executing command 'sgive' in plugin TastySweets v1.1
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_45]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_45]
            at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_45]
    Caused by: java.lang.NullPointerException
            at sweets.SGive.onCommand(SGive.java:35) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
            ... 15 more
    В самом первом скрипте, скрипте команды, я мог бы конечно не получать переменные из Handler, а просто создать всё отдельно, но мне нужно всё же получать её из Handler, потому что в будущем мне возможно придётся использовать эту конфету для своих целей через Handler. Мне кажется, что в этом и есть ошибка, но какие тогда могут быть альтернативы, или как это исправить? Заранее спасибо!
     
  2. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Поменяй вот это
    Код:
       public SGive(mainClass plugin) {
           this.plugin = plugin;
       }
     
       public SGive(Handler handler) {
           this.handler = handler; //Получаю все переменные из класса Handler
       }
    
    на это
    Код:
       public SGive(mainClass plugin, Handler handler) {
           this.plugin = plugin;
           this.handler = handler; //Получаю все переменные из класса Handler
       }
    
    
     
  3. Автор темы
    VirtualGuys

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

    Баллы:
    61
    Теперь в mainClass появляется ошибка.
    "The constructor SGive(mainClass) is undefined"
    Код:
    getCommand("SGive").setExecutor(new SGive(this));
    Ошибка в "new SGive(this)"
     
  4. Автор темы
    VirtualGuys

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

    Баллы:
    61
    А, всё, спасибо, уже не нужно. Смог исправить просто приписывая рандомно разные слова))
     
Статус темы:
Закрыта.

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