Player.getInventory.setItem does not work on a specific slot

Discussion in 'Plugin Development' started by DevMax_Plg, Dec 31, 2019.

Thread Status:
Not open for further replies.
  1. Offline

    DevMax_Plg

    Hey guys,

    I have a problem:
    As already mentioned in the title, the 5th slot in my inventory cannot be set in my code. I use the whole thing in connection with a PlayerChangeWorld listener.

    I don't know why but it's only the 5th slot that doesn't work. The remaining slots work. I also don't get any errors or logs.

    Here is the Code from the listener class:
    (Inventory.setitem in Line 45)

    Code:Java
    1.  
    2. package de.max.maxgameplugin.listeners;
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.Material;
    5. import org.bukkit.World;
    6. import org.bukkit.configuration.file.FileConfiguration;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.event.EventHandler;
    9. import org.bukkit.event.Listener;
    10. import org.bukkit.event.player.PlayerChangedWorldEvent;
    11. import org.bukkit.event.player.PlayerQuitEvent;
    12. import org.bukkit.inventory.ItemStack;
    13. import de.max.maxgameplugin.countdowns.LobbyCountdown;
    14. import de.max.maxgameplugin.gamestates.LobbyState;
    15. import de.max.maxgameplugin.main.Main;
    16. import de.max.maxgameplugin.util.ConfigLocationUtil;
    17. import de.max.maxgameplugin.util.ItemBuilder;
    18. import de.max.maxgameplugin.voting.Voting;
    19. public class PlayerLobbyConnectionListener implements Listener{
    20.  
    21. public static final String VOTING_ITEM_NAME = "§6§lMap-Voting";
    22.  
    23. private Main plugin;
    24. private ItemStack voteItem;
    25.  
    26. public PlayerLobbyConnectionListener(Main plugin) {
    27. this.plugin = plugin;
    28. voteItem = new ItemBuilder(Material.NETHER_STAR).setDisplayName(VOTING_ITEM_NAME).build();
    29. }
    30.  
    31. @EventHandler
    32. public void handlePlayerChangeWorld(PlayerChangedWorldEvent event) {
    33. FileConfiguration config = Main.getPlugin().getConfig();
    34. World configWorld = Bukkit.getWorld(config.getString("GameLobby.World"));
    35. if (config.getString("GameLobby.World") == null) return;
    36. if(event.getPlayer().getWorld() == configWorld) {
    37. if(!(plugin.getGameStateManager().getCurrentGameState() instanceof LobbyState)) return;
    38. Player player = event.getPlayer();
    39. plugin.getPlayers().add(player);
    40. for (Player p : event.getPlayer().getWorld().getPlayers()) {
    41. p.sendMessage(Main.PREFIX + "§a" + player.getDisplayName() + " §7ist dem Spiel beigetreten. [" + plugin.getPlayers().size() + "/" + LobbyState.MAX_PLAYERS + "]");
    42. }
    43.  
    44. player.getInventory().clear();
    45. player.getInventory().setItem(4, voteItem);
    46. player.sendMessage(Main.PREFIX + "Item angeblich gesetzt");
    47.  
    48. ConfigLocationUtil locationUtil = new ConfigLocationUtil(plugin, "GameLobby");
    49. if(locationUtil.loadLocation() != null) {
    50. player.teleport(locationUtil.loadLocation());
    51. } else {
    52. Bukkit.getConsoleSender().sendMessage(Main.PREFIX + "§cDie Lobby-Location wurde noch nicht gesetzt!");
    53. }
    54.  
    55. LobbyState lobbyState = (LobbyState)plugin.getGameStateManager().getCurrentGameState();
    56. LobbyCountdown countdown = lobbyState.getCountdown();
    57. if(plugin.getPlayers().size() >= LobbyState.MIN_PLAYERS) {
    58. if(!countdown.isRunning()) {
    59. countdown.stopIdle();
    60. countdown.start();
    61. }
    62. }
    63. } else if (event.getFrom() == configWorld) {
    64. if(!(plugin.getGameStateManager().getCurrentGameState() instanceof LobbyState)) return;
    65. Player player = event.getPlayer();
    66. plugin.getPlayers().remove(player);
    67. for (Player p : event.getFrom().getPlayers()) {
    68. p.sendMessage(Main.PREFIX + "§c" + player.getDisplayName() + " §7hat das Spiel verlassen. [" + plugin.getPlayers().size() + "/" + LobbyState.MAX_PLAYERS + "]");
    69. }
    70.  
    71. LobbyState lobbyState = (LobbyState)plugin.getGameStateManager().getCurrentGameState();
    72. LobbyCountdown countdown = lobbyState.getCountdown();
    73. if(plugin.getPlayers().size() < LobbyState.MIN_PLAYERS) {
    74. if(countdown.isRunning()) {
    75. countdown.stop();
    76. countdown.startIdle();
    77. }
    78. }
    79.  
    80. Voting voting = plugin.getVoting();
    81. if(voting.getPlayerVotes().containsKey(player.getName())) {
    82. voting.getVotingMaps()[voting.getPlayerVotes().get(player.getName())].removeVote();
    83. voting.initVotingInventory();
    84. }
    85. }
    86. }
    87.  
    88. @EventHandler
    89. public void handlePlayerQuit(PlayerQuitEvent event) {
    90. FileConfiguration config = Main.getPlugin().getConfig();
    91. World configWorld = Bukkit.getWorld(config.getString("MaxPlugin.Game.World"));
    92. Player player = event.getPlayer();
    93. if (config.getString("MaxPlugin.Game.World") == null) return;
    94. if(player.getWorld() == configWorld) {
    95. if(!(plugin.getGameStateManager().getCurrentGameState() instanceof LobbyState)) return;
    96. plugin.getPlayers().remove(player);
    97. for (Player p : configWorld.getPlayers()) {
    98. p.sendMessage(Main.PREFIX + "§c" + player.getDisplayName() + " §7hat das Spiel verlassen. [" + plugin.getPlayers().size() + "/" + LobbyState.MAX_PLAYERS + "]");
    99. }
    100.  
    101. LobbyState lobbyState = (LobbyState)plugin.getGameStateManager().getCurrentGameState();
    102. LobbyCountdown countdown = lobbyState.getCountdown();
    103. if(plugin.getPlayers().size() < LobbyState.MIN_PLAYERS) {
    104. if(countdown.isRunning()) {
    105. countdown.stop();
    106. countdown.startIdle();
    107. }
    108. }
    109.  
    110. Voting voting = plugin.getVoting();
    111. if(voting.getPlayerVotes().containsKey(player.getName())) {
    112. voting.getVotingMaps()[voting.getPlayerVotes().get(player.getName())].removeVote();
    113. voting.initVotingInventory();
    114. }
    115. }
    116.  
    117. }
    118.  
    119. }
    120.  


    I hope someone can help me with this error.

    Thanks in advance for all the helpers !
     
  2. Offline

    KarimAKL

  3. Offline

    DevMax_Plg

    Nope i dont know how to delay this single task.
    does it work with a new runnable?

    I also tried updating the inventory of the player but it doesnt work
     
  4. Offline

    Zombie_Striker

    @DevMax_Plg
    Try using the following:
    Code:java
    1.  
    2. new BukkitRunnable(){
    3. public void run(){
    4. //setItem in here
    5. }
    6. }.runTaskLater( MAIN_CLASS, 1);
    where MAIN_CLASS is the main class's instance.
     
Thread Status:
Not open for further replies.

Share This Page