Мне никогда не нравится прибегать к этому, потому что я пытаюсь решить код самостоятельно и выяснить, почему он не работает, на этот раз я действительно не понимаю, почему это не работает.
Вот инвентарь, который я сделал:
package io.github.bxnie.gui;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import net.minecraft.server.v1_12_R1.CommandExecute;
public class build extends CommandExecute implements Listener, CommandExecutor {
public String build = "build";
//open main GUI for building /build
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Player p = (Player) sender;
if (!(sender instanceof Player)) {
sender.sendMessage("Only players may execute this command!");
return true;
}
if (cmd.getName().equalsIgnoreCase(build) && sender instanceof Player) {
if (p.hasPermission("fp.build")) {
//Creates the Inventory
Inventory gui = Bukkit.createInventory(null, 27, ChatColor.BLUE + "Build Menu");
//Where the Items and Meta are made
ItemStack creative = new ItemStack(Material.CONCRETE, 1, (short) 3);
ItemMeta creativemeta = creative.getItemMeta();
creativemeta.setDisplayName(ChatColor.BLUE + "Creative Mode");
creativemeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
ArrayList<String> creativelore = new ArrayList<String>();
creativelore.add(ChatColor.GRAY + "Click this to set your gamemode to Creative!");
creativemeta.setLore(creativelore);
creative.setItemMeta(creativemeta);
//Positioning
gui.setItem(18, creative);
p.openInventory(gui);
} else {
p.sendMessage(ChatColor.RED + "Insufficient Permission!");
return false;
}
}
return false;
}
}
Вот события onclick для инвентаря:
package io.github.bxnie.events;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
public class buildmenu implements Listener {
@SuppressWarnings("unlikely-arg-type")
@EventHandler
public void InventoryOnClick(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
Inventory open = event.getInventory();
ItemStack item = event.getCurrentItem();
if(open == null) {
return;
}
if(open.getName().equals(ChatColor.BLUE + "Build Menu")) {
event.setCancelled(true);
if(item == null || !item.hasItemMeta()) {
return;
}
if(item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "Creative Mode")) {
Bukkit.broadcastMessage("Test");
return;
}
}
}
}
когда я использую команду / сборку в игре, открывается инвентарь с нужным предметом внутри, однако, когда я нажимаю на предмет, он не запускает тестовую трансляцию, которую я установил, на данный момент, кроме того, игрок может перемещать предметы в инвентаре.
Я уверен, что это просто простая ошибка, и мне жаль, что я зря трачу ваше время, но я пытаюсь исправить это уже час.
Спасибо -Бен