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

Статус
Закрыто для дальнейших ответов.

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. Мне кажется, что в этом и есть ошибка, но какие тогда могут быть альтернативы, или как это исправить? Заранее спасибо!
 
Добрый день! Я новичок в разработке плагинов, и пишу свой первый плагин. Наверное, это самый простой плагин который можно придумать, он добавляет в игру конфеты. Но пытаясь осуществить команду для которая выдаёт конфеты, столкнулся с ошибкой в консоли.
Команда "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. Мне кажется, что в этом и есть ошибка, но какие тогда могут быть альтернативы, или как это исправить? Заранее спасибо!
Поменяй вот это
Код:
   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
   }
 
Поменяй вот это
Код:
   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
   }
Теперь в mainClass появляется ошибка.
"The constructor SGive(mainClass) is undefined"
Код:
getCommand("SGive").setExecutor(new SGive(this));
Ошибка в "new SGive(this)"
 
Теперь в mainClass появляется ошибка.
"The constructor SGive(mainClass) is undefined"
Код:
getCommand("SGive").setExecutor(new SGive(this));
Ошибка в "new SGive(this)"
А, всё, спасибо, уже не нужно. Смог исправить просто приписывая рандомно разные слова))
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх