Hello again bukkit, i am trying to do stuff when right clicking a pie with a specific name but it does nothing. No xp boost, there might also be a problem with the duration of the effect too. Here is the code https://paste.myst.rs/dfzi3a8i
I did now but still doesnt work Code: public boosters(Leveling_System plugin){ Bukkit.getPluginManager().registerEvents(this, plugin); }
still nothing, and i check if its a player or not because it used to be a different event bu i changed it but i forgot to remove that check
Did you create an instance of this class ("boosters") upon the plugin being enabled (i.e. the onEnable method of your main class)? By the way, you should follow the Java naming conventions.
@Greeniousity Yes, you're currently registering the listener instance in the constructor, but if you never create this instance, it will not be registered.
@Greeniousity Assuming you print a message to the console upon the event triggering and that messages isn't coming up (as mentioned earlier), something must have gone wrong with either the listener registration or the plugin initialization. Can you show your main class and the server startup log?
https://paste.myst.rs/rabofyg4 here is the main class and i found an error related to this plugin, a null pointer exception Code: [18:28:34 ERROR]: Could not pass event InventoryClickEvent to RenderiteSB v1.0-SNAPSHOT java.lang.NullPointerException: null at me.altug.levelingsystem.boosters.InventoryClick(boosters.java:54) ~[?:?] at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor36.execute(Unknown Source) ~[?:?] at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.5.jar:git-Paper-794] at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.16.5.jar:git-Paper-794] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.5.jar:git-Paper-794] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:2715) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.PacketPlayInWindowClick.a(SourceFile:32) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.PacketPlayInWindowClick.a(SourceFile:10) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:35) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1271) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1264) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1225) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1139) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-794] at java.lang.Thread.run(Thread.java:750) [?:1.8.0_402]
Code: package me.altug.levelingsystem; import me.altug.levelingsystem.data.playerData; import org.bukkit.Bukkit; 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.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.Plugin; public class boosters implements Listener { public void boostSetup(int boost, Player player, int duration){ Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("Leveling_System"); playerData data = new playerData(); int current = data.getBoost(); if(current == 1) { System.out.println("§etest"); data.setBoost(boost); player.sendTitle("§d§l" + boost + "x Booster", "§8Applied to§e " + player, 1, 20, 1); Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() { public void run(){ data.setBoost(1); } }, 20 * duration); /* in seconds */ } } public static void pie(Player player) { ItemStack item = new ItemStack(Material.PUMPKIN_PIE); ItemMeta meta = item.getItemMeta(); meta.setDisplayName("§6Booster Pie§8§l (§eI§8§l)"); item.setItemMeta(meta); player.getInventory().addItem(item); } @EventHandler public void InventoryClick(InventoryClickEvent event) { System.out.println(event.getWhoClicked()); Inventory inventory = event.getClickedInventory(); ItemStack item = event.getCurrentItem(); if (event.getWhoClicked() instanceof Player) { System.out.println(event.getWhoClicked()); Player player = (Player) event.getWhoClicked(); if (item.getType() == Material.PUMPKIN_PIE && item.getItemMeta().getDisplayName().equals("§6Booster Pie§8§l (§eI§8§l)")) { boostSetup(2, player, 120); } } } }
@Greeniousity InventoryClickEvent#getCurrentItem() is @Nullable; it returns null when there is no item at the current slot. Make sure you don't access any of its members if it's null; do a null check. This error confirms the successful registration of the listener. Now you just have to fix the potential errors that can occur within the code.
if (item != null && item.getType() == Material.PUMPKIN_PIE && item.getItemMeta().getDisplayName().equals("§6Booster Pie§8§l (§eI§8§l)")) I did this to make sure that its not null
@Greeniousity https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/meta/ItemMeta.html#getDisplayName()
@timtower The ItemMeta#getDisplayName() method is annotated as @NotNull. I went to check the source code, and it should just return an empty string in case there's no display name. Additionally, ItemStack#getItemMeta() only returns null in case of an AIR material, which won't ever be the case here. Therefore, I reason this check should be valid. If you meant to refer to some other issue, please do elaborate. Yes, that is a valid null check. Do you still encounter any issues?
I updated it: Code: if (item.hasItemMeta() && item.getType() == Material.PUMPKIN_PIE && item.getItemMeta().getDisplayName().equals("§6Booster Pie§8§l (§eI§8§l)")) { boostSetup(2, player, 120); now it checks if item has meta and then checks the name I did, is it possible that all this is caused because pies are eatable? EDIT by Moderator: merged posts, please use the edit button instead of double posting. EDIT by me: I realised it but couldnt manage to merge them myself
@Greeniousity You reverted the change. You should still check if the item is (not) null. Add that back in (still as the first condition), then post the error here if it still persists. No, that is unrelated. You're simply checking if the item clicked in the inventory is a pie. This might not be my job to say as a regular user, but you cannot merge posts yourself; just let the bot handle it IF you ALREADY posted. The "EDIT by Moderator" is simply to let you know about the edit button and to avoid double posting.
Well its still not working after reverting to item != null, got no idea why Code: package me.altug.levelingsystem; import me.altug.levelingsystem.data.playerData; import org.bukkit.Bukkit; 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.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.Plugin; public class boosters implements Listener { public void boostSetup(int boost, Player player, int duration){ Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("Leveling_System"); playerData data = new playerData(); int current = data.getBoost(); if(current == 1) { System.out.println("§etest"); data.setBoost(boost); player.sendTitle("§d§l" + boost + "x Booster", "§8Applied to§e " + player, 1, 20, 1); Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() { public void run(){ data.setBoost(1); } }, 20L * duration); /* in seconds */ } } public static void pie(Player player) { ItemStack item = new ItemStack(Material.PUMPKIN_PIE); ItemMeta meta = item.getItemMeta(); meta.setDisplayName("§6Booster Pie§8§l (§eI§8§l)"); item.setItemMeta(meta); player.getInventory().addItem(item); } @EventHandler public void InventoryClick(InventoryClickEvent event) { System.out.println(event.getWhoClicked()); Inventory inventory = event.getClickedInventory(); ItemStack item = event.getCurrentItem(); if (event.getWhoClicked() instanceof Player) { System.out.println(event.getWhoClicked()); Player player = (Player) event.getWhoClicked(); if (item != null && item.getType() == Material.PUMPKIN_PIE && item.getItemMeta().getDisplayName().equals("§6Booster Pie§8§l (§eI§8§l)")) { boostSetup(2, player, 120); } } } } Code: package me.altug.levelingsystem; import me.altug.levelingsystem.data.playerData; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.io.IOException; public final class Leveling_System extends JavaPlugin implements Listener { @Override public void onEnable() { // Plugin startup logic saveResource("config.yml", false); createCustomConfig(); getCommand("level").setExecutor(new command(this)); Bukkit.getPluginManager().registerEvents(this, this); Bukkit.getPluginManager().registerEvents(new boosters(), this); } private void createCustomConfig() { File createDataFile = new File(getDataFolder(), "players.yml"); if(!createDataFile.exists()) { createDataFile.getParentFile().mkdirs(); saveResource("players.yml", false); } } @Override public void onDisable() { saveConfig(); } @EventHandler private void onJoinEvent(PlayerJoinEvent event) { playerData data = new playerData(); File dat = new File(getDataFolder().getAbsolutePath() + "/players.yml"); FileConfiguration conf = YamlConfiguration.loadConfiguration(dat); if(conf.contains("players." + event.getPlayer().getUniqueId().toString())) { data.setLevel(conf.getInt("players." + event.getPlayer().getUniqueId().toString() + ".main.level")); data.setReq(conf.getInt("players." + event.getPlayer().getUniqueId().toString() + ".main.required")); data.setExp(conf.getInt("players." + event.getPlayer().getUniqueId().toString() + ".main.exp")); data.setBoost(conf.getInt("players." + event.getPlayer().getUniqueId().toString() + ".main.boost")); System.out.println("§d(Created Data for) §e" + event.getPlayer()); System.out.println("§dLevel " + data.getLevel()); System.out.println("§dRequired " + data.getReq()); System.out.println("§dExperience " + data.getExp()); System.out.println("§dBoost " + data.getBoost()); } else { data.setLevel(1); data.setReq(50); data.setExp(0); data.setBoost(1); System.out.println("§d(Loaded Data for) §e" + event.getPlayer()); System.out.println("§dLevel " + data.getLevel()); System.out.println("§dRequired " + data.getReq()); System.out.println("§dExperience " + data.getExp()); System.out.println("§dBoost " + data.getBoost()); } command.setPlayerData(event.getPlayer(), data); } @EventHandler private void onQuit(PlayerQuitEvent event) { playerData data = command.getPlayerData(event.getPlayer()); File dat = new File(getDataFolder().getAbsolutePath() + "/players.yml"); FileConfiguration conf = YamlConfiguration.loadConfiguration(dat); conf.set("players." + event.getPlayer().getUniqueId().toString() + ".main.level", data.getLevel()); conf.set("players." + event.getPlayer().getUniqueId().toString() + ".main.required", data.getReq()); conf.set("players." + event.getPlayer().getUniqueId().toString() + ".main.exp", data.getExp()); conf.set("players." + event.getPlayer().getUniqueId().toString() + ".main.boost", 1); try { conf.save(dat); System.out.println("§d(Quit save ran for) §e" + event.getPlayer()); System.out.println("§dLevel " + data.getLevel()); System.out.println("§dRequired " + data.getReq()); System.out.println("§dExperience " + data.getExp()); System.out.println("§dBoost " + data.getBoost()); } catch (IOException e){ e.printStackTrace(); } command.resPlayerData(event.getPlayer()); } }
@Greeniousity https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/ItemStack.html#getItemMeta() It is Nullable, can be null, you don't check for null