package hdvtdev.blockAndSeek.roulette; import hdvtdev.blockAndSeek.BlockAndSeek; import hdvtdev.blockAndSeek.BlockAndSeekMap; import hdvtdev.blockAndSeek.EventListener; import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.MiscDisguise; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.NotNull; import java.util.List; public class RouletteCreator implements InventoryHolder { public static void createRoulette(Player player, Inventory inventory, boolean openInventory, List blocks) { Inventory gui = inventory == null ? new RouletteCreator().getInventory() : inventory; EventListener.createTask(player, new BukkitRunnable() { int i = 0; final RouletteGenerator rouletteGenerator = new RouletteGenerator(blocks); final List> rows = List.of( new RouletteList<>(rouletteGenerator.getRandomRow(15)), new RouletteList<>(rouletteGenerator.getRandomRow(15)), new RouletteList<>(rouletteGenerator.getRandomRow(15)) ); final List items = List.of( new ItemStack[]{ rows.getFirst().next(), rows.getFirst().next(), rows.getFirst().next(), rows.getFirst().next(), rows.getFirst().next() }, new ItemStack[]{ rows.get(1).next(), rows.get(1).next(), rows.get(1).next(), rows.get(1).next(), rows.get(1).next() }, new ItemStack[]{ rows.get(2).next(), rows.get(2).next(), rows.get(2).next(), rows.get(2).next(), rows.get(2).next() } ); @Override public void run() { for (int j = 0; j < 5; j++) { gui.setItem(3 + j * 9, items.getFirst()[j]); gui.setItem(5 + j * 9, items.get(1)[j]); gui.setItem(7 + j * 9, items.get(2)[j]); } player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 0.5f, 2f); if (i == 30) { player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 0.5f); EventListener.stopTask(player); } for (int j = 4; j >= 1; j--) { items.getFirst()[j] = items.getFirst()[j - 1]; items.get(1)[j] = items.get(1)[j - 1]; items.get(2)[j] = items.get(2)[j - 1]; } items.getFirst()[0] = rows.getFirst().next(); items.get(1)[0] = rows.get(1).next(); items.get(2)[0] = rows.get(2).next(); i++; } }.runTaskTimer(BlockAndSeek.getInstance(), 0, 3L)); new BukkitRunnable() { @Override public void run() { Inventory inventory = player.getOpenInventory().getTopInventory(); if (inventory.getHolder() instanceof RouletteCreator) { inventory.close(); MiscDisguise miscDisguise = new MiscDisguise(DisguiseType.FALLING_BLOCK, inventory.getItem(21)); DisguiseAPI.disguiseToAll(player, miscDisguise); } } }.runTaskLater(BlockAndSeek.getInstance(), 300L); if (openInventory) { player.openInventory(gui); player.setMetadata("RollingMenu", new FixedMetadataValue(BlockAndSeek.getInstance(), "RollingMenu")); } } @Override public @NotNull Inventory getInventory() { Inventory gui = Bukkit.createInventory(this, 45, Component.text("РулетОЧКА")); ItemStack filler = new ItemStack(Material.BLUE_STAINED_GLASS_PANE); ItemMeta fillerMeta = filler.getItemMeta(); fillerMeta.displayName(Component.text("")); fillerMeta.lore(null); fillerMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); filler.setItemMeta(fillerMeta); for (int i = 0; i < 45; i++) { gui.setItem(i, filler); } return gui; } }