BloodMoon/uk/co/jacekk/bukkit/bloodmoon/featurelisteners/BreakBlocksListener.java

169 lines
5.0 KiB
Java
Executable File

package uk.co.jacekk.bukkit.bloodmoon.featurelisteners;
import java.util.List;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.Enderman;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton;
import org.bukkit.entity.Spider;
import org.bukkit.entity.Zombie;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import uk.co.jacekk.bukkit.bloodmoon.BloodMoon;
import uk.co.jacekk.bukkit.bloodmoon.events.CreeperMoveEvent;
import uk.co.jacekk.bukkit.bloodmoon.events.EndermanMoveEvent;
import uk.co.jacekk.bukkit.bloodmoon.events.SkeletonMoveEvent;
import uk.co.jacekk.bukkit.bloodmoon.events.SpiderMoveEvent;
import uk.co.jacekk.bukkit.bloodmoon.events.ZombieMoveEvent;
public class BreakBlocksListener implements Listener {
private BloodMoon plugin;
private List<String> mobList;
public BreakBlocksListener(BloodMoon instance){
this.plugin = instance;
if (BloodMoon.config != null){
this.mobList = BloodMoon.config.getStringList("features.break-blocks.mobs");
}
}
private void mobAttemptBreakBlock(Block block){
if (block.getWorld().getTime() % 10 == 0 && plugin.rand.nextInt(100) < 50) return;
List<String> blockList = BloodMoon.config.getStringList("features.break-blocks.blocks");
Material type = block.getType();
if (type != Material.AIR && blockList.contains(type.toString())){
block.setType(Material.AIR);
block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(type, 1));
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onCreeperMoveEvent(CreeperMoveEvent event){
if (event.isCancelled() || this.mobList == null || mobList.contains("CREEPER") == false) return;
LivingEntity target = event.getTarget();
Creeper creeper = event.getCreeper();
if (target instanceof Player && BloodMoon.bloodMoonWorlds.contains(creeper.getWorld().getName())){
Block[] blocks = new Block[2];
try{
blocks[0] = creeper.getTargetBlock(null, 1);
blocks[1] = blocks[0].getRelative(BlockFace.DOWN);
}catch (Exception e){
return;
}
for (Block block : blocks){
this.mobAttemptBreakBlock(block);
}
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onSkeletonMoveEvent(SkeletonMoveEvent event){
if (event.isCancelled() || this.mobList == null || mobList.contains("SKELETON") == false) return;
LivingEntity target = event.getTarget();
Skeleton skeleton = event.getSkeleton();
if (target instanceof Player && BloodMoon.bloodMoonWorlds.contains(skeleton.getWorld().getName())){
Block[] blocks = new Block[2];
try{
blocks[0] = skeleton.getTargetBlock(null, 1);
blocks[1] = blocks[0].getRelative(BlockFace.DOWN);
}catch (Exception e){
return;
}
for (Block block : blocks){
this.mobAttemptBreakBlock(block);
}
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onSpiderMoveEvent(SpiderMoveEvent event){
if (event.isCancelled() || this.mobList == null || mobList.contains("SPIDER") == false) return;
LivingEntity target = event.getTarget();
Spider spider = event.getSpider();
if (target instanceof Player && BloodMoon.bloodMoonWorlds.contains(spider.getWorld().getName())){
Block[] blocks = new Block[2];
try{
blocks[0] = spider.getTargetBlock(null, 1);
blocks[1] = blocks[0].getRelative(BlockFace.DOWN);
}catch (Exception e){
return;
}
for (Block block : blocks){
this.mobAttemptBreakBlock(block);
}
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onZombieMoveEvent(ZombieMoveEvent event){
if (event.isCancelled() || this.mobList == null || mobList.contains("ZOMBIE") == false) return;
LivingEntity target = event.getTarget();
Zombie zombie = event.getZombie();
if (target instanceof Player && BloodMoon.bloodMoonWorlds.contains(zombie.getWorld().getName())){
Block[] blocks = new Block[2];
try{
blocks[0] = zombie.getTargetBlock(null, 1);
blocks[1] = blocks[0].getRelative(BlockFace.DOWN);
}catch (Exception e){
return;
}
for (Block block : blocks){
this.mobAttemptBreakBlock(block);
}
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onEndermanMoveEvent(EndermanMoveEvent event){
if (event.isCancelled() || this.mobList == null || mobList.contains("ENDERMAN") == false) return;
LivingEntity target = event.getTarget();
Enderman enderman = event.getEnderman();
if (target instanceof Player && BloodMoon.bloodMoonWorlds.contains(enderman.getWorld().getName())){
Block[] blocks = new Block[3];
try{
blocks[0] = enderman.getTargetBlock(null, 1);
blocks[1] = blocks[0].getRelative(BlockFace.DOWN);
blocks[2] = blocks[1].getRelative(BlockFace.DOWN);
}catch (Exception e){
return;
}
for (Block block : blocks){
this.mobAttemptBreakBlock(block);
}
}
}
}