Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.36 KB | None | 0 0
  1. package de.battlecraft25.cloud.lobby.util;
  2.  
  3. import de.battlecraft25.cloud.lobby.CloudLobby;
  4. import org.bukkit.Material;
  5. import org.bukkit.Sound;
  6. import org.bukkit.entity.Player;
  7. import org.bukkit.event.EventHandler;
  8. import org.bukkit.event.EventPriority;
  9. import org.bukkit.event.Listener;
  10. import org.bukkit.event.inventory.InventoryClickEvent;
  11. import org.bukkit.inventory.Inventory;
  12. import org.bukkit.inventory.ItemStack;
  13. import org.bukkit.scheduler.BukkitRunnable;
  14.  
  15. import java.util.HashSet;
  16. import java.util.UUID;
  17.  
  18. /**
  19. * Created by battlecraft25 on 21.08.2016.
  20. */
  21. public class InventoryTransition implements Listener {
  22.  
  23. public static HashSet<UUID> playersInTransition = new HashSet<>();
  24.  
  25. public static void displayTransition(final Player p, final Inventory inv, final TransitionDirection direction, final ItemStack[][] itemsMoveIn, final ItemStack[][] itemsMoveOut, Sound transitionSound) {
  26. playersInTransition.add(p.getUniqueId());
  27.  
  28. if (transitionSound != null)
  29. p.playSound(p.getLocation(), transitionSound, 1, 1);
  30.  
  31. new BukkitRunnable() {
  32. int counter = direction.getCounterPreloadValue();
  33.  
  34. @Override
  35. public void run() {
  36. if (!p.isOnline() || inv == null || inv.getViewers().isEmpty()) {
  37. this.cancel();
  38. playersInTransition.remove(p.getUniqueId());
  39. return;
  40. }
  41.  
  42. for (int row = 0; row < inv.getSize() / 9; row++) {
  43. if (direction == TransitionDirection.LEFT)
  44. for (int slot = 0; slot < 9; slot++) {
  45. if (itemsMoveOut != null && itemsMoveOut[row][slot] != null) {
  46. if (slot - (9 - counter) >= 0)
  47. inv.setItem((row * 9) + slot - (9 - counter), itemsMoveOut[row][slot]);
  48. if (slot - (9 - counter) + 1 >= 0 && slot - (9 - counter) + 1 < 9)
  49. inv.setItem((row * 9) + slot - (9 - counter) + 1, new ItemStack(Material.AIR));
  50. }
  51. if (itemsMoveIn != null && itemsMoveIn[row][slot] != null && slot + counter < 9) {
  52. inv.setItem((row * 9) + slot + counter, itemsMoveIn[row][slot]);
  53. if (slot + counter + 1 >= 0 && slot + counter + 1 < 9)
  54. inv.setItem((row * 9) + slot + counter + 1, new ItemStack(Material.AIR));
  55. }
  56. }
  57. else if (direction == TransitionDirection.RIGHT)
  58. for (int slot = 8; slot >= 0; slot--) {
  59. if (itemsMoveOut != null && itemsMoveOut[row][slot] != null) {
  60. if (slot + (9 + counter) < 9)
  61. inv.setItem((row * 9) + slot + (9 + counter), itemsMoveOut[row][slot]);
  62. if (slot + (9 + counter) - 1 >= 0 && slot + (9 + counter) - 1 < 9)
  63. inv.setItem((row * 9) + slot + (9 + counter) - 1, new ItemStack(Material.AIR));
  64. }
  65. if (itemsMoveIn != null && itemsMoveIn[row][slot] != null && slot + counter >= 0) {
  66. inv.setItem((row * 9) + slot + counter, itemsMoveIn[row][slot]);
  67. if (slot + counter - 1 >= 0 && slot + counter - 1 < 9)
  68. inv.setItem((row * 9) + slot + counter - 1, new ItemStack(Material.AIR));
  69. }
  70. }
  71. }
  72. p.updateInventory();
  73. if (counter == 0) {
  74. cancel();
  75. playersInTransition.remove(p.getUniqueId());
  76. }
  77. counter += direction.getIncrementValue();
  78. }
  79. }.runTaskTimer(CloudLobby.getInstance(), 0, 1);
  80. }
  81.  
  82. public static ItemStack[][] createAnimationArrays(Inventory inv, boolean replaceNullWithAir) {
  83. ItemStack[][] animationArrays = new ItemStack[inv.getSize() / 9][9];
  84. for (int row = 0; row < inv.getSize() / 9; row++)
  85. for (int slot = 0; slot < 9; slot++) {
  86. int itemIndex = (row * 9) + slot;
  87. ItemStack item = inv.getItem(itemIndex);
  88. if (item != null && item.getType() != Material.AIR)
  89. animationArrays[row][slot] = item.clone();
  90. if (animationArrays[row][slot] == null && replaceNullWithAir)
  91. animationArrays[row][slot] = new ItemStack(Material.AIR);
  92. }
  93. return animationArrays;
  94. }
  95.  
  96. @EventHandler(priority = EventPriority.HIGHEST)
  97. public void onClick(InventoryClickEvent e) {
  98. if (playersInTransition.contains(e.getWhoClicked().getUniqueId()))
  99. e.setCancelled(true);
  100. }
  101.  
  102. public enum TransitionDirection {
  103. LEFT, RIGHT;
  104.  
  105. public int getCounterPreloadValue() {
  106. if (this == LEFT) return 9;
  107. if (this == RIGHT) return -9;
  108. return 0;
  109. }
  110.  
  111. public int getIncrementValue() {
  112. if (this == LEFT) return -1;
  113. if (this == RIGHT) return 1;
  114. return 0;
  115. }
  116. }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement