Package com.nitnelave.CreeperHeal.listeners

Source Code of com.nitnelave.CreeperHeal.listeners.GriefListener

package com.nitnelave.CreeperHeal.listeners;

import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack;

import com.nitnelave.CreeperHeal.config.CreeperConfig;
import com.nitnelave.CreeperHeal.config.WCfgVal;
import com.nitnelave.CreeperHeal.config.WorldConfig;
import com.nitnelave.CreeperHeal.utils.CreeperMessenger;
import com.nitnelave.CreeperHeal.utils.CreeperPermissionManager;
import com.nitnelave.CreeperHeal.utils.CreeperPlayer;
import org.bukkit.projectiles.ProjectileSource;

/**
* Listener for grief-related events.
*/
public class GriefListener implements Listener
{

    /**
     * Listener for the BlockPlaceEvent. If the player does not have the rights
     * to place a block, the event is cancelled, and the appropriate warnings
     * are fired.
     *
     * @param event
     *            The BlockPlaceEvent.
     */
    @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
    public void onBlockPlace(BlockPlaceEvent event)
    {
        Player player = event.getPlayer();
        WorldConfig world = CreeperConfig.getWorld(player.getWorld());
        if (event.getBlockPlaced().getType() == Material.TNT
            && !CreeperPermissionManager.checkPermissions(player, false, "bypass.place-tnt"))
        {
            boolean blocked = world.getBool(WCfgVal.BLOCK_TNT);
            if (blocked)
                event.setCancelled(true);
            if (world.getBool(WCfgVal.WARN_TNT))
                CreeperMessenger.warn(CreeperPlayer.WarningCause.TNT, player, blocked, null);
        }
        else if (world.isGriefBlackListed(event.getBlock())
                 && !CreeperPermissionManager.checkPermissions(player, false, "bypass.place-blacklist"))
        {
            boolean blocked = world.getBool(WCfgVal.GRIEF_BLOCK_BLACKLIST);
            if (blocked)
                event.setCancelled(true);
            if (world.getBool(WCfgVal.WARN_BLACKLIST))
                CreeperMessenger.warn(CreeperPlayer.WarningCause.BLACKLIST, player, blocked, event.getBlockPlaced().getType().toString());
        }

    }

    /**
     * Listener for the BlockIgniteEvent. If fire spreading or fire from lava is
     * disabled, cancel the event.
     *
     * @param event
     *            The BlockIgniteEvent.
     */
    @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
    public void onBlockIgnite(BlockIgniteEvent event)
    {
        WorldConfig world = CreeperConfig.getWorld(event.getBlock().getWorld());

        if (event.getCause() == IgniteCause.SPREAD && world.getBool(WCfgVal.PREVENT_FIRE_SPREAD))
            event.setCancelled(true);
        else if (event.getCause() == IgniteCause.LAVA && world.getBool(WCfgVal.PREVENT_FIRE_LAVA))
            event.setCancelled(true);
    }

    /**
     * Listener for the EntityDamageByEntityEvent. Control PVP and check for
     * destroyed paintings.
     *
     * @param event
     *            The EntityDamageByEntityEvent.
     */
    @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
    public void onEntityDamageByEntity(EntityDamageByEntityEvent event)
    {
        if (event.getEntity() instanceof Player)
        {
            Player attacked = (Player) event.getEntity();
            Player offender = null;
            String message = attacked.getDisplayName();
            Entity attacker;
            switch (event.getCause())
            {
            case ENTITY_ATTACK:
                attacker = event.getDamager();
                if (attacker instanceof Player)
                    offender = (Player) attacker;
                break;
            case PROJECTILE:
            case MAGIC:
                Entity damager = event.getDamager();
                if (damager instanceof Projectile)
                {
                    ((Projectile) damager).getShooter();
                    ProjectileSource source = ((Projectile) damager).getShooter();
                    if (source instanceof Player)
                        offender = (Player) source;
                }
                break;
            default:
            }
            if (offender != null && !offender.equals(attacked)
                && !CreeperPermissionManager.checkPermissions(offender, true, "bypass.pvp"))
            {
                WorldConfig world = CreeperConfig.getWorld(event.getEntity().getWorld());
                boolean blocked = world.getBool(WCfgVal.BLOCK_PVP);
                if (blocked)
                    event.setCancelled(true);
                if (world.getBool(WCfgVal.WARN_PVP))
                    CreeperMessenger.warn(CreeperPlayer.WarningCause.PVP, offender, blocked, message);
            }
        }
    }

    /**
     * Listener for the PlayerBucketEmptyEvent. Check for lava placement.
     *
     * @param event
     *            The PlayerBucketEmpty event.
     */
    @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
    public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event)
    {
        WorldConfig world = CreeperConfig.getWorld(event.getPlayer().getWorld());

        Player player = event.getPlayer();
        if (event.getBucket() == Material.LAVA_BUCKET
            && !CreeperPermissionManager.checkPermissions(player, true, "bypass.place-lava"))
        {
            boolean blocked = world.getBool(WCfgVal.BLOCK_LAVA);
            if (blocked)
                event.setCancelled(true);
            if (world.getBool(WCfgVal.WARN_LAVA))
                CreeperMessenger.warn(CreeperPlayer.WarningCause.LAVA, player, blocked, null);
        }
    }

    /**
     * Listener for the PlayerInteractEvent. Check for monster egg use, and
     * block ignition.
     *
     * @param event
     *            The PlayerInteract event.
     */
    @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
    public void onPlayerInteract(PlayerInteractEvent event)
    {
        ItemStack item = event.getItem();
        if (item == null)
            return;

        Player player = event.getPlayer();
        WorldConfig world = CreeperConfig.getWorld(player.getWorld());

        if (item.getType() == Material.MONSTER_EGG
            && !CreeperPermissionManager.checkPermissions(player, true, "bypass.spawnEgg"))
        {
            String entityType = EntityType.fromId(event.getItem().getData().getData()).getName();

            boolean blocked = world.getBool(WCfgVal.BLOCK_SPAWN_EGGS);
            if (blocked)
                event.setCancelled(true);
            if (world.getBool(WCfgVal.WARN_SPAWN_EGGS))
                CreeperMessenger.warn(CreeperPlayer.WarningCause.SPAWN_EGG, player, blocked, entityType);
        }
        else if (item.getType() == Material.FLINT_AND_STEEL
                 && !CreeperPermissionManager.checkPermissions(player, true, "bypass.ignite"))
        {
            boolean blocked = world.getBool(WCfgVal.BLOCK_IGNITE);
            if (blocked)
                event.setCancelled(true);
            if (world.getBool(WCfgVal.WARN_IGNITE))
                CreeperMessenger.warn(CreeperPlayer.WarningCause.FIRE, player, blocked, null);
        }
    }

    /**
     * Listener for the PlayerJoinEvent. Add when appropriate to the warning
     * list.
     *
     * @param event
     *            The PlayerJoin event.
     */
    @EventHandler(priority = EventPriority.MONITOR)
    public void onPlayerJoin(PlayerJoinEvent event)
    {
        CreeperMessenger.registerPlayer(new CreeperPlayer(event.getPlayer()));
    }

    /**
     * Listener for the PlayerQuitEvent. Remove when appropriate from the
     * warning list.
     *
     * @param event
     *            The PlayerQuit event.
     */
    @EventHandler(priority = EventPriority.MONITOR)
    public void onPlayerQuit(PlayerQuitEvent event)
    {
        CreeperMessenger.removeFromWarnList(new CreeperPlayer(event.getPlayer()));
    }

}
TOP

Related Classes of com.nitnelave.CreeperHeal.listeners.GriefListener

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.