所以,我在一个类中有一个定制的库存生成器,它构建了一个库存的基本模板并存储起来供以后使用。要做到这一点,建设者首先创建库存,然后用玻璃窗格填充它。然后创建两个自定义项,一个确认和一个取消按钮(具体块),并将它们添加到特定插槽中的库存中。
但是,当我尝试创建任何自定义按钮以添加到资源清册时,它会返回以下错误:
[16:31:29] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to GameHandler v1.0-SNAPSHOT
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:319) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:482) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.PlayerInteractManager.a(PlayerInteractManager.java:444) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.PlayerConnection.a(PlayerConnection.java:1278) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.PacketPlayInUseItem.a(PacketPlayInUseItem.java:27) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.PacketPlayInUseItem.a(PacketPlayInUseItem.java:1) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.TickTask.run(SourceFile:18) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeTask(SourceFile:144) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeNext(SourceFile:118) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.MinecraftServer.ba(MinecraftServer.java:941) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.MinecraftServer.executeNext(MinecraftServer.java:934) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.awaitTasks(SourceFile:127) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.MinecraftServer.sleepForTick(MinecraftServer.java:918) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:850) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.NullPointerException
at io.github.gamehandler.catapults.CatapultCreator.newInventory(CatapultCreator.java:49) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at io.github.gamehandler.events.WorldEvents.onPlayerInteract(WorldEvents.java:64) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:315) ~[spigot-1.16.2.jar:git-Spigot-379750e-9a9c223]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
... 20 more
这两项都会发生错误。下面是两段代码:
库存生成器
public HashMap<String, Object> newInventory(UUID id) {
if (id != null) {
if (!storage.containsKey(id)) {
HashMap<String, Object> tempMap = new HashMap<>();
storage.put(id, tempMap);
}
// Create new inventory
Inventory inv = Bukkit.createInventory(null, 45, "Catapult Creation Confirmation");
// Add default items
ItemStack grayGlassPane = new ItemStack(Material.GRAY_STAINED_GLASS_PANE, 1);
for (int i = 0; i < inv.getSize(); i++) {
inv.setItem(i, grayGlassPane);
}
// Create custom items and add to inventory
List<String> confirmLore = new ArrayList<>();
confirmLore.add("&7Confirms and &acreates &7a new &acatapult &7object to use");
confirmLore.add("&7every time the map is &aloaded.");
ItemStack confirm = customItems.createCustomItem(Material.LIME_CONCRETE, 1, "&a&lConfirm", confirmLore, false);
inv.setItem(15, confirm);
List<String> cancelLore = new ArrayList<>();
cancelLore.add("&cCancels &7the creation of a new &ccatapult.");
ItemStack cancel = customItems.createCustomItem(Material.RED_CONCRETE, 1, "&c&lCancel", cancelLore, false);
inv.setItem(24, cancel);
// Store new inventory
storage.get(id).put("inventory", inv);
// Return new data
return storage.get(id);
} else {
return null;
}
}
项目生成器
public class CustomItems {
public ItemStack createCustomItem(Material type, int amount, String name, List<String> lore, Boolean enchanted) {
ItemStack item = new ItemStack(type, amount);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name));
meta.setLore(this.colorItemLore(lore));
if (enchanted == true) {
item.addUnsafeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1);
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
}
item.setItemMeta(meta);
return item;
}
private List<String> colorItemLore(List<String> lore) {
List<String> newLore = new ArrayList<>();
for (String loreLine : lore) {
newLore.add(ChatColor.translateAlternateColorCodes('&', loreLine));
}
return newLore;
}
}
项生成器在任何其他情况下都可以很好地工作,并且可以创建自定义项。
如有任何帮助,我们将不胜感激,请提前感谢!
暂无答案!
目前还没有任何答案,快来回答吧!