blob: 6a58181275d6e83d54cf86d41f7094fc29f112b1 [file] [log] [blame] [raw]
package net.glowstone.entity.passive;
import com.google.common.collect.Sets;
import net.glowstone.entity.GlowAnimal;
import net.glowstone.entity.GlowPlayer;
import net.glowstone.entity.meta.MetadataIndex;
import net.glowstone.net.message.play.player.InteractEntityMessage;
import net.glowstone.util.InventoryUtil;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Pig;
import org.bukkit.entity.PigZombie;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public class GlowPig extends GlowAnimal implements Pig {
private static final Set<Material> BREEDING_FOODS = Sets.immutableEnumSet(Material.CARROT,
Material.POTATO,
Material.BEETROOT);
public GlowPig(Location location) {
super(location, EntityType.PIG, 10);
setSize(0.9F, 0.9F);
}
@Override
public boolean hasSaddle() {
return metadata.getBoolean(MetadataIndex.PIG_SADDLE);
}
@Override
public void setSaddle(boolean hasSaddle) {
metadata.set(MetadataIndex.PIG_SADDLE, hasSaddle);
}
@Override
public boolean entityInteract(GlowPlayer player, InteractEntityMessage message) {
super.entityInteract(player, message);
if (message.getAction() == InteractEntityMessage.Action.INTERACT.ordinal()) {
if (!isAdult()) {
return false;
}
if (!hasSaddle()) {
ItemStack hand = InventoryUtil
.itemOrEmpty(player.getInventory().getItem(message.getHandSlot()));
if (hand.getType() == Material.SADDLE) {
setSaddle(true);
if (player.getGameMode() != GameMode.CREATIVE) {
player.getInventory().consumeItemInHand(message.getHandSlot());
}
return true;
}
return false;
}
return isEmpty() && setPassenger(player);
}
return false;
}
@Override
protected Sound getHurtSound() {
return Sound.ENTITY_PIG_HURT;
}
@Override
protected Sound getDeathSound() {
return Sound.ENTITY_PIG_DEATH;
}
@Override
protected Sound getAmbientSound() {
return Sound.ENTITY_PIG_AMBIENT;
}
@Override
public void damage(double amount, Entity source, @NotNull DamageCause cause) {
if (!DamageCause.LIGHTNING.equals(cause)) {
super.damage(amount, source, cause);
return;
}
PigZombie pigZombie = world.spawn(this.location, PigZombie.class);
pigZombie.damage(amount, source, cause);
remove();
}
@Override
public Set<Material> getBreedingFoods() {
return BREEDING_FOODS;
}
}