- Баллы
- 61
Добрый день! Я новичок в разработке плагинов, и пишу свой первый плагин. Наверное, это самый простой плагин который можно придумать, он добавляет в игру конфеты. Но пытаясь осуществить команду для которая выдаёт конфеты, столкнулся с ошибкой в консоли.
Команда "give":
Handler:
Ошибка в логах:
В самом первом скрипте, скрипте команды, я мог бы конечно не получать переменные из 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; //Конец
}
}
Код:
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