macsik12
Пользователь
- Сообщения
- 1
Пишу плагин на GUI для банов.
Не могу понять почему при срабатывании события inventory click в inv лежит null
BanInventory.java
Вот main:
И исполнитель команды:
Не могу понять почему при срабатывании события inventory click в inv лежит null
BanInventory.java
Java:
package com.macsik12.bangui;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
public class BanInventory implements Listener {
private Inventory inv;
private Player pl;
public BanInventory(Player player) {
inv = Bukkit.createInventory(null, 45, "Ban GUI");
pl = player;
initializeItems();
}
public BanInventory() {
}
public void initializeItems() {
ArrayList<Player> playerList = new ArrayList<>(pl.getServer().getOnlinePlayers());
System.out.println(inv);
for (int i = 0; i < playerList.size(); i++) {
ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD, 1);
ItemMeta meta = playerHead.getItemMeta();
meta.setDisplayName(playerList.get(i).getDisplayName());
ArrayList<String> lore = new ArrayList<>();
lore.add(ChatColor.GOLD + "Player Health: " + playerList.get(i).getHealth());
lore.add(ChatColor.GOLD + "EXP: " + playerList.get(i).getExp());
meta.setLore(lore);
playerHead.setItemMeta(meta);
inv.addItem(playerHead);
}
}
public void openInventory(Player player) {
player.openInventory(inv);
}
public void openInventory() {
pl.openInventory(inv);
}
@EventHandler
public void onInventoryClick(final InventoryClickEvent e) {
Player clicker = (Player) e.getWhoClicked();
// ЗДЕСЬ ВСЕГДА inv == NULL и Я НЕ МОГУ ОТСЛЕДИТЬ БЫЛ ЛИ НАЖАТ ИМЕННО ИНВЕНТАРЬ БАНА
if(e.getInventory() != inv) {
clicker.sendMessage("No");
return;
};
e.setCancelled(true);
clicker.sendMessage("Yes");
}
@EventHandler
public void onInventoryDrag(InventoryDragEvent e) {
if(e.getInventory() == inv) {
e.setCancelled(true);
}
}
}
Вот main:
Код:
package com.macsik12.bangui;
import com.macsik12.bangui.commands.BanCommand;
import org.bukkit.plugin.java.JavaPlugin;
public final class Bangui extends JavaPlugin {
@Override
public void onEnable() {
// Plugin startup logic
getCommand("bangui").setExecutor(new BanCommand());
getServer().getPluginManager().registerEvents(new BanInventory(), this);
}
}
И исполнитель команды:
Код:
package com.macsik12.bangui.commands;
import com.macsik12.bangui.BanInventory;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class BanCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player player = (Player) sender;
BanInventory banGui = new BanInventory(player);
banGui.openInventory();
}
return true;
}
}
Последнее редактирование: