Cancel closing custom inventory

Discussion in 'Plugin Development' started by PingschelleMC, Oct 14, 2014.

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

    PingschelleMC

    Like you can see in the title, I need some example code for CANCEL closing an inventory, because I have no idea how to do that. I tried InventoryCloseEvent and checked for event.setCancelled(true), but there is no option for that.

    My Class (if you need it):

    Code:java
    1. package mineventure.events;
    2.  
    3. import mineventure.main.Core;
    4.  
    5. import org.bukkit.Material;
    6. import org.bukkit.entity.Player;
    7. import org.bukkit.event.EventHandler;
    8. import org.bukkit.event.Listener;
    9. import org.bukkit.event.inventory.InventoryClickEvent;
    10. import org.bukkit.inventory.ItemStack;
    11.  
    12. public class ClassClickEvent implements Listener {
    13.  
    14. public Core plugin;
    15.  
    16. public ClassClickEvent(Core plugin) {
    17. this.plugin = plugin;
    18. plugin.getServer().getPluginManager().registerEvents(this, plugin);
    19. }
    20.  
    21. @EventHandler
    22. public void onClick(InventoryClickEvent event) {
    23. Player p = (Player) event.getWhoClicked();
    24.  
    25. if(event.getInventory().getName().equalsIgnoreCase("§8» §3Wähle deine Klasse")) {
    26. event.setCancelled(true);
    27. }
    28.  
    29. if(event.getCurrentItem().getType() == Material.BOW) {
    30. if(!plugin.archerselect.contains(p.getName()) && !plugin.warriorselect.contains(p.getName())) {
    31. plugin.archerselect.add(p.getName());
    32. p.sendMessage("§8» §aDu hast die Klasse §8'§7Bogenschütze§8' §agewählt!");
    33. p.closeInventory();
    34. ItemStack[] contents = plugin.inventory.get(p.getName());
    35. p.getInventory().setContents(contents);
    36. } else if(plugin.archerselect.contains(p.getName()) && !plugin.warriorselect.contains(p.getName())) {
    37. p.sendMessage("§8» §aDu hast die Klasse §8'§7Bogenschütze§8' §agewählt!");
    38. ItemStack[] contents = plugin.inventory.get(p.getName());
    39. p.closeInventory();
    40. p.getInventory().setContents(contents);
    41. } else if(plugin.warriorselect.contains(p.getName())) {
    42. p.sendMessage("§8» §cDu hast bereits eine andere Klasse gewählt!");
    43. }
    44.  
    45. }
    46.  
    47. if(event.getCurrentItem().getType() == Material.IRON_CHESTPLATE) {
    48. if(!plugin.warriorselect.contains(p.getName()) && !plugin.archerselect.contains(p.getName())) {
    49. plugin.warriorselect.add(p.getName());
    50. p.sendMessage("§8» §aDu hast die Klasse §8'§7Krieger§8' §agewählt!");
    51. p.closeInventory();
    52. ItemStack[] contents = plugin.inventory.get(p.getName());
    53. p.getInventory().setContents(contents);
    54. } else if(plugin.warriorselect.contains(p.getName()) && !plugin.archerselect.contains(p.getName())) {
    55. p.sendMessage("§8» §aDu hast die Klasse §8'§7Krieger§8' §agewählt!");
    56. p.closeInventory();
    57. ItemStack[] contents = plugin.inventory.get(p.getName());
    58. p.getInventory().setContents(contents);
    59. } else if(plugin.archerselect.contains(p.getName())) {
    60. p.sendMessage("§8» §cDu hast bereits eine andere Klasse gewählt!");
    61. }
    62. }
    63. }
    64.  
    65. }
    66.  


    Pls help :)
     
  2. Offline

    fireblast709

    PingschelleMC you would have to reopen the inventory in a 0 tick delayed task (BukkitRunnable#runTask()).
     
  3. Offline

    PingschelleMC

    Example code? I used Tasks before (Scheduler), but newer BukkitRunnables? Thanks btw for your quick anwser :)
     
  4. Offline

    teej107

    Schedulars would work too.
     
  5. Offline

    fireblast709

  6. Offline

    PingschelleMC

    One question: Where do I have to put the scheduler/task?

    This doesn't seem to work
    Code:java
    1. @EventHandler
    2. public void onClose(InventoryCloseEvent event) {
    3. Player p = (Player) event.getPlayer();
    4.  
    5. if(event.getInventory().equals("§8» §3Wähle deine Klasse")) {
    6. task = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
    7.  
    8. @Override
    9. public void run() {
    10. p.openInventory(JoinMessage.chooseClass);
    11. }
    12.  
    13. }, 1, 1);
    14. }
    15. }
     
  7. Offline

    fireblast709

    PingschelleMC
    • You would use a delayed task (and you could set the delay to 0)
    • I never knew an Inventory could equal a String ;3 (line 5)
     
Thread Status:
Not open for further replies.

Share This Page