package net.diamonddominion.esaych.global;
import java.util.ArrayList;
import net.diamonddominion.esaych.CustomPlugin;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.entity.CreatureType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.player.PlayerInteractEvent;
@SuppressWarnings("deprecation")
public class SpawnerSwitch {
private CustomPlugin plugin;
private ArrayList<CreatureType> mobs = new ArrayList<CreatureType>();
LivingEntity e;
public SpawnerSwitch(CustomPlugin plugin) {
this.plugin = plugin;
}
public void enable() {
// plugin.getServer().getPluginManager().registerEvents(this, plugin);
mobs.add(CreatureType.PIG);
mobs.add(CreatureType.SHEEP);
mobs.add(CreatureType.COW);
mobs.add(CreatureType.CHICKEN);
mobs.add(CreatureType.ZOMBIE);
mobs.add(CreatureType.SKELETON);
mobs.add(CreatureType.SPIDER);
mobs.add(CreatureType.CAVE_SPIDER);
mobs.add(CreatureType.PIG_ZOMBIE);
log("Enabled");
}
private int getInt(CreatureType c) {
for (int i = 0; i < mobs.size(); i++) {
if (mobs.get(i) == c)
return i;
}
return 0;
}
private void playSound(CreatureType c, Block b) {
e = b.getWorld().spawnCreature(b.getLocation().add(.5, 1, .5), c);
e.damage(200);
}
private boolean isAllowedToBeBreaked(Block spawner) {
Block lowerBlock = spawner.getRelative(BlockFace.DOWN);
if (lowerBlock.getType() == Material.GLOWSTONE && lowerBlock.getData() == (byte)1)
return false;
return true;
}
public void msg(Player player, String msg) {
player.sendMessage(ChatColor.DARK_GREEN + "[" + ChatColor.RED + "Spawner" + ChatColor.DARK_GREEN + "] " + ChatColor.GREEN + msg);
}
// @EventHandler
public void onEntityDeath(EntityDeathEvent event) {
if (event.getEntity() == e) {
event.getDrops().clear();
event.setDroppedExp(0);
}
}
// @EventHandler
public void onPlayerPunch(PlayerInteractEvent event) {
final Block spawner = event.getClickedBlock();
if (spawner != null && spawner.getType() == Material.MOB_SPAWNER) {
Player player = event.getPlayer();
String world = player.getWorld().getName();
if (!world.equals("GameWorld") && isAllowedToBeBreaked(spawner)) {
CreatureSpawner cage = ((CreatureSpawner) spawner.getState());
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (!player.getInventory().getItemInHand().getType().isBlock() || player.getItemInHand().getType() == Material.AIR) {
int i = getInt(cage.getCreatureType()) + 1;
try {
cage.setCreatureType(mobs.get(i));
playSound(mobs.get(i), spawner);
} catch (Exception e) {
cage.setCreatureType(mobs.get(0));
playSound(mobs.get(0), spawner);
}
// Location loc = spawner.getLocation();
// if (i == 1) {
// spawner.getWorld().playSound(loc, Sound.SHEEP_IDLE , 3F, 3F);
// } else if (i == 2) {
// spawner.getWorld().playSound(loc, Sound.COW_IDLE, 3F, 3F);
// }
msg(player, "Changed to a " + ChatColor.AQUA + cage.getCreatureTypeName() + ". " + ChatColor.GREEN + "Relog to see it.");
} else {
msg(player, "You can only change spawners when you have nothing in your hand.");
}
} else if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
player.sendMessage(ChatColor.RED + "=========== " + ChatColor.DARK_RED + "Mob Spawner List" + ChatColor.RED + " ===========");
for (CreatureType c : mobs) {
String msg = ChatColor.DARK_GREEN + String.valueOf(getInt(c) + 1) + ". " + ChatColor.GREEN + c.getName();
if (c.getName().equals("Cow"))
msg += ChatColor.RED + " Current Spawner Type:";
if (c.getName().equals("Chicken"))
msg += " " + ChatColor.BOLD + " " + cage.getCreatureTypeName();
if (c.getName().equals("CaveSpider"))
msg += ChatColor.RED + " Use like you would a noteblock";
player.sendMessage(msg);
}
}
} else {
msg(player, "You can not change this spawner.");
}
}
}
public void log(String info) {
plugin.getLogger().info("<SpawnerSwitch> " + info);
}
}