Untitled

 avatar
unknown
java
11 days ago
4.3 kB
3
Indexable
public abstract class ArenaEventListeners<T extends Arena> implements EventListener {

    private final CooldownHandler<UUID> moveActionCooldown = new CooldownHandler<>(1000);
    public final T arena;

    private ArenaDisguiseListeners listeners;

    public ArenaEventListeners(T arena) {
        this.arena = arena;
        register(ArcadeGame.getPlugin());
        if (ArcadeModule.getInstance().getPhoenixHook().isPresent()) {
            Bukkit.getPluginManager().registerEvents(listeners = new ArenaDisguiseListeners(arena), ArcadeGame.getPlugin());
        }
    }

    protected boolean isEventVerified(BlockEvent event) {
        return event.getBlock().getWorld().equals(arena.getWorld());
    }

    protected boolean isEventVerified(EntityEvent event) {
        return event.getEntity().getWorld().equals(arena.getWorld());
    }

    protected boolean isEventVerified(PlayerEvent event) {
        return event.getPlayer().getWorld().equals(arena.getWorld());
    }

    @EventHandler
    public void onPlayerDropItem(PlayerDropItemEvent event) {
        Player player = event.getPlayer();

        if (arena.isSpectating(player)) {
            event.setCancelled(true);
        }
    }

    @EventHandler
    public void onPlayerSpawnLocation(PlayerSpawnLocationEvent event) {
        if (arena.isCachedJoin(event.getPlayer().getUniqueId())) {
            event.setSpawnLocation(arena.getSpawnLocation());
        }
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        event.setJoinMessage(null);

        Player player = event.getPlayer();
        UUID uuid = player.getUniqueId();

        if (arena.isCachedJoin(uuid)) {
            arena.invalidateJoinCache(uuid);
            arena.addPlayer(player);
        }
    }

    @EventHandler
    public void _onPlayerInteract(PlayerInteractEvent event) {
        if (!isEventVerified(event)) return;

        Player player = event.getPlayer();
        UUID uuid = player.getUniqueId();

        if (arena.isSpectating(player)) {
            event.setCancelled(true);
        }

        ItemStack item = event.getItem();
        PlayerInfo playerInfo = arena.getPlayerInfo(player);

        Optional<Party> partyByPlayer = PartyManager.byPlayer(uuid);
        Optional<Party> partyByLeader = PartyManager.byLeader(uuid);

        if (ItemPlayAgain.is(item)) {
            ArenaType type = ItemPlayAgain.getType(item);

            if (moveActionCooldown.isOnCooldown(uuid)) {
                ChatUtils.sendMessage(player, "&cPlease Wait!");
            } else if (partyByPlayer.isPresent() && partyByLeader.isPresent()) {
                playerInfo.getCommonController().requestPlay(type, partyByLeader.get().getPlayers().size());
            } else if (partyByPlayer.isPresent()) {
                ChatUtils.sendMessage(player, "&cYou can't replay while being in a party, ask the party leader or leave the party using /party leave");
            } else {
                playerInfo.getCommonController().requestPlay(type, 1);
            }
        }
        if (ItemLeave.is(item)) {
            if (moveActionCooldown.isOnCooldown(uuid)) {
                ChatUtils.sendMessage(player, "&cPlease Wait!");
            } else if (partyByPlayer.isPresent() && partyByLeader.isPresent()) {
                playerInfo.getCommonController().requestPartyLobby();
            } else if (partyByPlayer.isPresent()) {
                ChatUtils.sendMessage(player, "&cYou can't leave while being in a party, ask the party leader or leave the party using /party leave");
            } else {
                playerInfo.getCommonController().requestLobby();
            }
        }
        if (ItemSpectatorSettings.is(item) && arena.isSpectating(player)) {
            Menu.open(player, new SpectatorSettingsMenu(playerInfo.getSpectatorController(), playerInfo.getCachedData(SpectatorSetting.key())));
        }
        if (ItemTeleporter.is(item) && arena.isSpectating(player)) {
            Menu.open(player, new TeleporterMenu(arena, player));
        }
    }

    @Override
    public void unregister() {
        EventListener.super.unregister();
        if (listeners != null) {
            unregister(listeners);
        }
    }
}
Editor is loading...
Leave a Comment