Hello, I am having some issues accessing a variable from another method, this is more of a Java question than anything, but everywhere I research they say just put the variable outside of your methods, that's what I've done but it doesn't seem to be working, here is the code that is relevant: I've defined the variable at the top of my class Code (Text): public final class Main extends JavaPlugin implements Listener { Player selected; Then I select a random online player (that doesn't have a certain permission) and set that player to "selected". This following code is placed inside a PlayerInteractEvent Code (Text): // Put all online players (excluding those with the bypass permission) into a list ArrayList<Player> allPlayers = new ArrayList<Player>(); for (Player players : Bukkit.getOnlinePlayers()) { if (!(players.hasPermission("tracker.bypass"))) { allPlayers.add(players); } } // If our list equals 0 meaning there are no players online that don't bypass tracker send the player a message if (allPlayers.size() == 0) { event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(net.md_5.bungee.api.ChatColor.RED + "There are no trackable players online")); return; } // Finally, get a random player from our list of trackable players int randomPlayer = new Random().nextInt(allPlayers.size()); Player selected = allPlayers.get(randomPlayer); The final part is that I want to access the variable in another method, a PlayerDeathEvent to be able to see if the player dies that was selected Code (Text): @EventHandler // When the tracking player dies stop tracking them public void onDeath(PlayerDeathEvent event) { System.out.println("Death event seen. Entity that died is: " + event.getEntity()); System.out.println("Playing being tracked is: " + selected); if (event.getEntity() != selected) return; System.out.println("Tracker should be set to false"); boolean trackerActive = false; } As you can see I have some logging messages going on for debugging, and when I print out the variable "selected" it is null.
It should be the final line of the second snippet of code? Code (Text): Player selected = allPlayers.get(randomPlayer);
You're declaring a new 'selected' variable within the scope of your method. It just needs to be this: Code (Java): selected = allPlayers.get(randomPlayer);
You're creating a new local variable in your method, it is only accessible in your method. You have to initialize your field in order to use it between methods. This might help explain a bit more.
My goodness, thank you so much, that's so dumb of me, I took a short (week or so break from coding) and between that and learning BukkitRunnables for the first time my brain is fried, thank you!