package nl.sugcube.crystalquest.items; import nl.sugcube.crystalquest.Broadcast; import nl.sugcube.crystalquest.CrystalQuest; import nl.sugcube.crystalquest.game.Arena; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; import org.bukkit.entity.Rabbit; import org.bukkit.entity.Rabbit.Type; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * @author SugarCaney */ public class BloodBunny extends ItemExecutor { private static final Set<PotionEffect> RABBIT_BUFF = Collections.unmodifiableSet( new HashSet<PotionEffect>() {{ add(new PotionEffect(PotionEffectType.JUMP, 9999, 0)); add(new PotionEffect(PotionEffectType.SPEED, 9999, 1)); add(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 9999, 1)); add(new PotionEffect(PotionEffectType.REGENERATION, 9999, 0)); add(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 9999, 1)); }}); public BloodBunny() { super(Material.CARROT_ITEM); } @Override public void removeItem(CrystalQuest plugin, Player player, ItemStack itemStack) { if (itemStack.getAmount() == 1) { Bukkit.getScheduler().scheduleSyncDelayedTask( plugin, () -> player.getInventory().removeItem(itemStack), 1L); } else { itemStack.setAmount(itemStack.getAmount() - 1); } } @Override boolean execute(CrystalQuest plugin, Player player, ItemStack itemStack) { // Pick target player. Arena arena = plugin.getArenaManager().getArena(player.getUniqueId()); Player target = arena.getRandomPlayer(player); if (target == null) { target = player; } // Summon rabbit. World world = player.getWorld(); Rabbit rabbit = world.spawn(target.getLocation().add(0, 2, 0), Rabbit.class); rabbit.setRabbitType(Type.THE_KILLER_BUNNY); rabbit.setCustomName("Killer Rabbit of Caerbannog"); rabbit.setTarget(target); rabbit.addPotionEffects(RABBIT_BUFF); rabbit.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(20f); player.playSound(player.getLocation(), Sound.ENTITY_RABBIT_DEATH, 12F, 12F); // Send confirmation message player.sendMessage(Broadcast.get("item-use.rabbit") .replace("%player%", target.getName())); return true; } }