Package com.garbagemule.MobArena.listeners

Source Code of com.garbagemule.MobArena.listeners.MAGlobalListener

package com.garbagemule.MobArena.listeners;

import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.*;
import org.bukkit.event.entity.*;
import org.bukkit.event.hanging.HangingBreakEvent;
import org.bukkit.event.player.*;
import org.bukkit.event.vehicle.VehicleExitEvent;
import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.event.world.WorldUnloadEvent;

import com.garbagemule.MobArena.Messenger;
import com.garbagemule.MobArena.MobArena;
import com.garbagemule.MobArena.framework.Arena;
import com.garbagemule.MobArena.framework.ArenaMaster;
import com.garbagemule.MobArena.leaderboards.Stats;
import com.garbagemule.MobArena.util.VersionChecker;
import com.garbagemule.MobArena.util.inventory.InventoryManager;

/**
* The point of this class is to simply redirect all events to each arena's
* own listener(s).
* This means only one actual listener need be registered in Bukkit, and thus
* less overhead. Of course, this requires a little bit of "hackery" here
* and there.
*/
public class MAGlobalListener implements Listener
{
    private MobArena plugin;
    private ArenaMaster am;
   
    public MAGlobalListener(MobArena plugin, ArenaMaster am) {
        this.plugin = plugin;
        this.am = am;
    }
   
    ///////////////////////////////////////////////////////////////////////////
    //                                                                       //
    //                            BLOCK EVENTS                               //
    //                                                                       //
    ///////////////////////////////////////////////////////////////////////////
   
    //TODO watch block physics, piston extend, and piston retract events
    @EventHandler(priority = EventPriority.HIGHEST)
    public void blockBreak(BlockBreakEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onBlockBreak(event);
    }

    @EventHandler
    public void hangingBreak(HangingBreakEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onHangingBreak(event);
    }

    @EventHandler(priority = EventPriority.HIGHEST)
    public void blockBurn(BlockBurnEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onBlockBurn(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void blockForm(BlockFormEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onBlockForm(event);
    }

    @EventHandler(priority = EventPriority.HIGH)
    public void blockIgnite(BlockIgniteEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onBlockIgnite(event);
    }

    @EventHandler(priority = EventPriority.HIGHEST)
    public void blockPlace(BlockPlaceEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onBlockPlace(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void signChange(SignChangeEvent event) {
        if (!event.getPlayer().hasPermission("mobarena.setup.leaderboards")) {
            return;
        }
       
        if (!event.getLine(0).startsWith("[MA]")) {
            return;
        }
       
        String text = event.getLine(0).substring((4));
        Arena arena;
        Stats stat;
       
        if ((arena = am.getArenaWithName(text)) != null) {
            arena.getEventListener().onSignChange(event);
            setSignLines(event, ChatColor.GREEN + "MobArena", ChatColor.YELLOW + arena.arenaName(), ChatColor.AQUA + "Players", "---------------");
        }
        else if ((stat = Stats.getByShortName(text)) != null) {
            setSignLines(event, ChatColor.GREEN + "", "", ChatColor.AQUA + stat.getFullName(), "---------------");
            Messenger.tell(event.getPlayer(), "Stat sign created.");
        }
    }
   
    private void setSignLines(SignChangeEvent event, String s1, String s2, String s3, String s4) {
        event.setLine(0, s1);
        event.setLine(1, s2);
        event.setLine(2, s3);
        event.setLine(3, s4);
    }
   
   
   
    ///////////////////////////////////////////////////////////////////////////
    //                                                                       //
    //                           ENTITY EVENTS                               //
    //                                                                       //
    ///////////////////////////////////////////////////////////////////////////
   
   
    @EventHandler(priority = EventPriority.HIGHEST)
    public void creatureSpawn(CreatureSpawnEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onCreatureSpawn(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void onEntityChangeBlock(EntityChangeBlockEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onEntityChangeBlock(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void entityCombust(EntityCombustEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onEntityCombust(event);
    }

    @EventHandler(priority = EventPriority.LOW)
    public void entityDamage(EntityDamageEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onEntityDamage(event);
    }

    @EventHandler(priority = EventPriority.LOWEST)
    public void entityDeath(EntityDeathEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onEntityDeath(event);
    }

    @EventHandler(priority = EventPriority.HIGHEST)
    public void entityExplode(EntityExplodeEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onEntityExplode(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void entityRegainHealth(EntityRegainHealthEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onEntityRegainHealth(event);
    }
   
    @EventHandler(priority = EventPriority.NORMAL)
    public void entityFoodLevelChange(FoodLevelChangeEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onFoodLevelChange(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void entityTarget(EntityTargetEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onEntityTarget(event);
    }
   
    @EventHandler(priority = EventPriority.HIGH)
    public void entityTeleport(EntityTeleportEvent event) {
        for (Arena arena : am.getArenas()) {
            arena.getEventListener().onEntityTeleport(event);
        }
    }
   
    @EventHandler(priority = EventPriority.NORMAL)
    public void potionSplash(PotionSplashEvent event) {
        for (Arena arena : am.getArenas()) {
            arena.getEventListener().onPotionSplash(event);
        }
    }
   
   
   
    ///////////////////////////////////////////////////////////////////////////
    //                                                                       //
    //                           PLAYER EVENTS                               //
    //                                                                       //
    ///////////////////////////////////////////////////////////////////////////
   
   
    @EventHandler(priority = EventPriority.NORMAL)
    public void playerAnimation(PlayerAnimationEvent event) {
        if (!am.isEnabled()) return;
        for (Arena arena : am.getArenas())
            arena.getEventListener().onPlayerAnimation(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void playerBucketEmpty(PlayerBucketEmptyEvent event) {
        if (!am.isEnabled()) return;
        for (Arena arena : am.getArenas())
            arena.getEventListener().onPlayerBucketEmpty(event);
    }

    @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
    public void playerChat(AsyncPlayerChatEvent event) {
        if (!am.isEnabled()) return;

        Arena arena = am.getArenaWithPlayer(event.getPlayer());
        if (arena == null || !arena.hasIsolatedChat()) return;

        event.getRecipients().retainAll(arena.getAllPlayers());
    }

    @EventHandler(priority = EventPriority.LOWEST)
    public void playerCommandPreprocess(PlayerCommandPreprocessEvent event) {
        if (!am.isEnabled()) return;
        for (Arena arena : am.getArenas())
            arena.getEventListener().onPlayerCommandPreprocess(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void playerDropItem(PlayerDropItemEvent event) {
        if (!am.isEnabled()) return;
        for (Arena arena : am.getArenas())
            arena.getEventListener().onPlayerDropItem(event);
    }

    // HIGHEST => after SignShop
    @EventHandler(priority = EventPriority.HIGHEST)
    public void playerInteract(PlayerInteractEvent event) {
        if (!am.isEnabled()) return;
        for (Arena arena : am.getArenas())
            arena.getEventListener().onPlayerInteract(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void playerJoin(PlayerJoinEvent event) {
        InventoryManager.restoreFromFile(plugin, event.getPlayer());
        if (!am.notifyOnUpdates() || !event.getPlayer().isOp()) return;

        VersionChecker.checkForUpdates(plugin, event.getPlayer());
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void playerKick(PlayerKickEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onPlayerKick(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void playerQuit(PlayerQuitEvent event) {
        for (Arena arena : am.getArenas())
            arena.getEventListener().onPlayerQuit(event);
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void playerRespawn(PlayerRespawnEvent event) {
        for (Arena arena : am.getArenas()) {
            if (arena.getEventListener().onPlayerRespawn(event)) {
                return;
            }
        }
       
        plugin.restoreInventory(event.getPlayer());
    }
   
    public enum TeleportResponse {
        ALLOW, REJECT, IDGAF
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void playerTeleport(PlayerTeleportEvent event) {
        if (!am.isEnabled()) return;
       
        boolean allow = true;
        for (Arena arena : am.getArenas()) {
            TeleportResponse r = arena.getEventListener().onPlayerTeleport(event);
           
            // If just one arena allows, uncancel and stop.
            switch (r) {
                case ALLOW:
                    event.setCancelled(false);
                    return;
                case REJECT:
                    allow = false;
                    break;
                default: break;
            }
        }
       
        // Only cancel if at least one arena has rejected the teleport.
        if (!allow) {
            event.setCancelled(true);
        }
    }
   
    @EventHandler(priority = EventPriority.NORMAL)
    public void playerPreLogin(PlayerLoginEvent event) {
        for (Arena arena : am.getArenas()) {
            arena.getEventListener().onPlayerPreLogin(event);
        }
    }

    @EventHandler(priority = EventPriority.NORMAL)
    public void vehicleExit(VehicleExitEvent event) {
        for (Arena arena : am.getArenas()) {
            arena.getEventListener().onVehicleExit(event);
        }
    }
   
   
   
    ///////////////////////////////////////////////////////////////////////////
    //                                                                       //
    //                            WORLD EVENTS                               //
    //                                                                       //
    ///////////////////////////////////////////////////////////////////////////
   
   
    @EventHandler(priority = EventPriority.NORMAL)
    public void worldLoadEvent(WorldLoadEvent event) {
        am.loadArenasInWorld(event.getWorld().getName());
    }
   
    @EventHandler(priority = EventPriority.NORMAL)
    public void worldUnloadEvent(WorldUnloadEvent event) {
        am.unloadArenasInWorld(event.getWorld().getName());
    }
}
TOP

Related Classes of com.garbagemule.MobArena.listeners.MAGlobalListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.