Guest User

Untitled

a guest
Jul 19th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. import org.bukkit.event.EventHandler;
  2. import org.bukkit.event.Listener;
  3. import org.bukkit.event.inventory.InventoryClickEvent;
  4. import org.bukkit.event.inventory.InventoryDragEvent;
  5. import org.bukkit.event.inventory.InventoryType;
  6. import org.bukkit.plugin.java.JavaPlugin;
  7.  
  8. public class NoChestForYouJavaPlugin extends JavaPlugin implements Listener {
  9. @Override
  10. public void onEnable() {
  11. getServer().getPluginManager().registerEvents(this, this);
  12. }
  13.  
  14. /**
  15. * Impede que o jogador altere baús clicando ou trocando com atalhos de teclado.
  16. */
  17. @EventHandler(ignoreCancelled = true)
  18. public void onInventoryClick(InventoryClickEvent event) {
  19. if (event.getView().getTopInventory().getType() != InventoryType.CHEST) {
  20. return;
  21. }
  22.  
  23. // Forma completa e mais segura em atualizações. Se uma action nova for adicionada ela é recusada.
  24. switch (event.getAction()) {
  25. // Nada foi alterado, clicou no vazio com nada no ponteiro.
  26. case NOTHING:
  27. break;
  28.  
  29. // Moveu de um inventário para outro, cancelar.
  30. case MOVE_TO_OTHER_INVENTORY:
  31. case HOTBAR_SWAP:
  32. event.setCancelled(true);
  33. break;
  34.  
  35. // Copiou no modo criativo ou selecionou com o botão do meio no modo sobrevivencia
  36. // Isso não altera o inventário de cima (baú no caso)
  37. case CLONE_STACK:
  38. case COLLECT_TO_CURSOR:
  39. event.setCancelled(false);
  40. break;
  41.  
  42. // Indefinido, melhor rejeitar
  43. case UNKNOWN:
  44. event.setCancelled(true);
  45. break;
  46.  
  47. // Todos esses aqui são alterações com clique, verificar se o slot clicado faz parte do inventário de cima
  48. // Se for o inventário de baixo então o jogador está mexendo no próprio inventário e não no baú
  49. case PICKUP_ALL:
  50. case PICKUP_SOME:
  51. case PICKUP_HALF:
  52. case PICKUP_ONE:
  53. case PLACE_ALL:
  54. case PLACE_SOME:
  55. case PLACE_ONE:
  56. case SWAP_WITH_CURSOR:
  57. case DROP_ALL_CURSOR:
  58. case DROP_ONE_CURSOR:
  59. case DROP_ALL_SLOT:
  60. case DROP_ONE_SLOT:
  61. case HOTBAR_MOVE_AND_READD:
  62. event.setCancelled(event.getClickedInventory().equals(event.getView().getTopInventory()));
  63. break;
  64.  
  65. default:
  66. event.setCancelled(true);
  67. break;
  68. }
  69.  
  70. // Forma resumida mas precisa ser revisada em novas versões Bukkit caso [InventoryAction] seja alterado.
  71. /*switch (event.getAction()) {
  72. // Moveu de um inventário para outro, cancelar.
  73. case MOVE_TO_OTHER_INVENTORY:
  74. case HOTBAR_SWAP:
  75. event.setCancelled(true);
  76. break;
  77.  
  78. // Copiou no modo criativo ou selecionou com o botão do meio no modo sobrevivencia
  79. // Isso não altera o inventário de cima (baú no caso)
  80. case CLONE_STACK:
  81. case COLLECT_TO_CURSOR:
  82. case NOTHING:
  83. event.setCancelled(false);
  84. break;
  85.  
  86. // Indefinido, melhor rejeitar
  87. case UNKNOWN:
  88. event.setCancelled(true);
  89. break;
  90.  
  91. default:
  92. event.setCancelled(event.getClickedInventory().equals(event.getView().getTopInventory()));
  93. break;
  94. }*/
  95. }
  96.  
  97. /**
  98. * Impede que jogadores alterem baús arrastando o item na mão em no inventário.
  99. */
  100. @EventHandler(ignoreCancelled = true)
  101. public void onInventoryDrag(InventoryDragEvent event) {
  102. // O número do primeiro slot (raw) do inventário de baixo é sempre o tamanho do inventário de cima.
  103. int primeiroSlotInventorioDeBaixo = event.getView().getTopInventory().getSize();
  104.  
  105. // Cancelar se alterar algum slot do inventário de cima.
  106. event.setCancelled(event.getRawSlots().stream().anyMatch(slot-> slot >= primeiroSlotInventorioDeBaixo));
  107. }
  108. }
Add Comment
Please, Sign In to add comment