Package com.nitnelave.CreeperHeal.listeners

Source Code of com.nitnelave.CreeperHeal.listeners.CreeperListener$ReplaceMonsterEgg

package com.nitnelave.CreeperHeal.listeners;

import java.util.Date;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Hanging;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityBreakDoorEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.hanging.HangingBreakEvent;

import com.nitnelave.CreeperHeal.CreeperHeal;
import com.nitnelave.CreeperHeal.block.BurntBlockManager;
import com.nitnelave.CreeperHeal.block.CreeperBurntBlock;
import com.nitnelave.CreeperHeal.block.CreeperHanging;
import com.nitnelave.CreeperHeal.block.ExplodedBlockManager;
import com.nitnelave.CreeperHeal.config.CfgVal;
import com.nitnelave.CreeperHeal.config.CreeperConfig;
import com.nitnelave.CreeperHeal.config.WCfgVal;
import com.nitnelave.CreeperHeal.config.WorldConfig;
import com.nitnelave.CreeperHeal.utils.CreeperLog;
import com.nitnelave.CreeperHeal.utils.CreeperUtils;
import com.nitnelave.CreeperHeal.utils.FactionHandler;
import com.nitnelave.CreeperHeal.utils.Suffocating;

/**
* Listener for the entity events.
*
* @author nitnelave
*
*/
public class CreeperListener implements Listener
{

    /**
     * Listener for the EntityExplodeEvent. Record when appropriate the
     * explosion for later replacement.
     *
     * @param event
     *            The EntityExplode event.
     */
    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
    public void onEntityExplode(EntityExplodeEvent event)
    {
        WorldConfig world = CreeperConfig.getWorld(event.getLocation().getWorld());

        if (!FactionHandler.shouldIgnore(event.blockList(), world))
        {
            Entity entity = event.getEntity();
            if (entity == null && !world.isAbove(event.getLocation()))
                return;
            if (world.shouldReplace(entity))
                ExplodedBlockManager.processExplosion(event, CreeperUtils.getReason(entity));
        }
    }

    /**
     * Listener for the HangingBreakEvent. If appropriate, the hanging is
     * recorded to be replaced later on.
     *
     * @param event
     *            The HangingBreakEvent.
     */
    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
    public void onHangingBreak(HangingBreakEvent event)
    {
        Hanging h = event.getEntity();
        WorldConfig world = CreeperConfig.getWorld(h.getWorld());
        switch (event.getCause())
        {
        case EXPLOSION:
            ExplodedBlockManager.recordHanging(h);
            break;
        case PHYSICS:
        case OBSTRUCTION:
            if (BurntBlockManager.isNextToFire(h.getLocation()) && world.getBool(WCfgVal.FIRE))
                BurntBlockManager.recordBurntBlock(new CreeperBurntBlock(new Date(), CreeperHanging.newHanging(h)));
            break;
        default:
        }

    }

    /**
     * Listener for the EntityChangeBlockEvent. Check for Endermen picking up
     * blocks.
     *
     * @param event
     *            The EntityChangeBlock event.
     */
    @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
    public void onEntityChangeBlock(EntityChangeBlockEvent event)
    {
        if (event.getEntityType() == EntityType.SILVERFISH
            && event.getBlock().getType() == Material.MONSTER_EGGS
            && CreeperConfig.getBool(CfgVal.REPLACE_SILVERFISH_BLOCKS))
            Bukkit.getScheduler().runTask(CreeperHeal.getInstance(), new ReplaceMonsterEgg(event.getBlock()));
        else if (event.getEntity().getType() == EntityType.ENDERMAN)
        {
            WorldConfig world = CreeperConfig.getWorld(event.getBlock().getWorld());
            if (world.getBool(WCfgVal.ENDERMAN))
                event.setCancelled(true);
        }
    }

    /**
     * Listener for the EntityBreakDoorEvent. Record doors broken by zombies.
     *
     * @param event
     *            The EntityBreakDoor event.
     */
    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
    public void onEntityBreakDoor(EntityBreakDoorEvent event)
    {
        WorldConfig world = CreeperConfig.getWorld(event.getBlock().getWorld());
        if (event.getEntityType() == EntityType.ZOMBIE && world.getBool(WCfgVal.ZOMBIE_DOOR))
        {
            CreeperLog.displayBlockLocation(event.getBlock(), false);
            BurntBlockManager.recordBurntBlock(event.getBlock());
        }
    }

    class ReplaceMonsterEgg implements Runnable
    {
        private final Block block;
        private final Material type;

        public ReplaceMonsterEgg(Block block)
        {
            switch (block.getData())
            {
            case 0:
                type = Material.STONE;
                break;
            case 1:
                type = Material.COBBLESTONE;
                break;
            default:
                type = Material.SMOOTH_BRICK;
            }
            this.block = block;
        }

        @Override
        public void run()
        {
            block.setType(type);
            Suffocating.checkPlayerOneBlock(block.getLocation());
        }
    }

}
TOP

Related Classes of com.nitnelave.CreeperHeal.listeners.CreeperListener$ReplaceMonsterEgg

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.