Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package de.battlecraft25.cloud.lobby.util;
- import de.battlecraft25.cloud.lobby.CloudLobby;
- import org.bukkit.Material;
- import org.bukkit.Sound;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.EventPriority;
- import org.bukkit.event.Listener;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.scheduler.BukkitRunnable;
- import java.util.HashSet;
- import java.util.UUID;
- /**
- * Created by battlecraft25 on 21.08.2016.
- */
- public class InventoryTransition implements Listener {
- public static HashSet<UUID> playersInTransition = new HashSet<>();
- public static void displayTransition(final Player p, final Inventory inv, final TransitionDirection direction, final ItemStack[][] itemsMoveIn, final ItemStack[][] itemsMoveOut, Sound transitionSound) {
- playersInTransition.add(p.getUniqueId());
- if (transitionSound != null)
- p.playSound(p.getLocation(), transitionSound, 1, 1);
- new BukkitRunnable() {
- int counter = direction.getCounterPreloadValue();
- @Override
- public void run() {
- if (!p.isOnline() || inv == null || inv.getViewers().isEmpty()) {
- this.cancel();
- playersInTransition.remove(p.getUniqueId());
- return;
- }
- for (int row = 0; row < inv.getSize() / 9; row++) {
- if (direction == TransitionDirection.LEFT)
- for (int slot = 0; slot < 9; slot++) {
- if (itemsMoveOut != null && itemsMoveOut[row][slot] != null) {
- if (slot - (9 - counter) >= 0)
- inv.setItem((row * 9) + slot - (9 - counter), itemsMoveOut[row][slot]);
- if (slot - (9 - counter) + 1 >= 0 && slot - (9 - counter) + 1 < 9)
- inv.setItem((row * 9) + slot - (9 - counter) + 1, new ItemStack(Material.AIR));
- }
- if (itemsMoveIn != null && itemsMoveIn[row][slot] != null && slot + counter < 9) {
- inv.setItem((row * 9) + slot + counter, itemsMoveIn[row][slot]);
- if (slot + counter + 1 >= 0 && slot + counter + 1 < 9)
- inv.setItem((row * 9) + slot + counter + 1, new ItemStack(Material.AIR));
- }
- }
- else if (direction == TransitionDirection.RIGHT)
- for (int slot = 8; slot >= 0; slot--) {
- if (itemsMoveOut != null && itemsMoveOut[row][slot] != null) {
- if (slot + (9 + counter) < 9)
- inv.setItem((row * 9) + slot + (9 + counter), itemsMoveOut[row][slot]);
- if (slot + (9 + counter) - 1 >= 0 && slot + (9 + counter) - 1 < 9)
- inv.setItem((row * 9) + slot + (9 + counter) - 1, new ItemStack(Material.AIR));
- }
- if (itemsMoveIn != null && itemsMoveIn[row][slot] != null && slot + counter >= 0) {
- inv.setItem((row * 9) + slot + counter, itemsMoveIn[row][slot]);
- if (slot + counter - 1 >= 0 && slot + counter - 1 < 9)
- inv.setItem((row * 9) + slot + counter - 1, new ItemStack(Material.AIR));
- }
- }
- }
- p.updateInventory();
- if (counter == 0) {
- cancel();
- playersInTransition.remove(p.getUniqueId());
- }
- counter += direction.getIncrementValue();
- }
- }.runTaskTimer(CloudLobby.getInstance(), 0, 1);
- }
- public static ItemStack[][] createAnimationArrays(Inventory inv, boolean replaceNullWithAir) {
- ItemStack[][] animationArrays = new ItemStack[inv.getSize() / 9][9];
- for (int row = 0; row < inv.getSize() / 9; row++)
- for (int slot = 0; slot < 9; slot++) {
- int itemIndex = (row * 9) + slot;
- ItemStack item = inv.getItem(itemIndex);
- if (item != null && item.getType() != Material.AIR)
- animationArrays[row][slot] = item.clone();
- if (animationArrays[row][slot] == null && replaceNullWithAir)
- animationArrays[row][slot] = new ItemStack(Material.AIR);
- }
- return animationArrays;
- }
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onClick(InventoryClickEvent e) {
- if (playersInTransition.contains(e.getWhoClicked().getUniqueId()))
- e.setCancelled(true);
- }
- public enum TransitionDirection {
- LEFT, RIGHT;
- public int getCounterPreloadValue() {
- if (this == LEFT) return 9;
- if (this == RIGHT) return -9;
- return 0;
- }
- public int getIncrementValue() {
- if (this == LEFT) return -1;
- if (this == RIGHT) return 1;
- return 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement