package net.glowstone.entity.passive; import com.flowpowered.network.Message; import net.glowstone.entity.meta.MetadataIndex; import net.glowstone.entity.meta.MetadataMap; import net.glowstone.inventory.GlowHorseInventory; import net.glowstone.net.message.play.entity.EntityMetadataMessage; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Horse; import org.bukkit.inventory.HorseInventory; import java.util.List; import java.util.Random; public class GlowHorse extends GlowAbstractHorse implements Horse { private Variant variant = Variant.values()[new Random().nextInt(2)]; private Color horseColor = Color.values()[new Random().nextInt(6)]; private Style horseStyle = Style.values()[new Random().nextInt(3)]; private boolean eatingHay; private boolean hasReproduced; private int temper; private HorseInventory inventory = new GlowHorseInventory(this); public GlowHorse(Location location) { super(location, EntityType.HORSE, 15); setSize(1.4F, 1.6F); } @Override public Variant getVariant() { return variant; } @Override public void setVariant(Variant variant) { this.variant = variant; } @Override public Color getColor() { return horseColor; } @Override public void setColor(Color color) { horseColor = color; } @Override public Style getStyle() { return horseStyle; } @Override public void setStyle(Style style) { horseStyle = style; } @Override public boolean isCarryingChest() { // Field has been removed in 1.11 return false; } @Override public void setCarryingChest(boolean b) { // Field has been removed in 1.11 } @Override public HorseInventory getInventory() { return inventory; } public void setInventory(HorseInventory inventory) { this.inventory = inventory; } public boolean isEatingHay() { return eatingHay; } public void setEatingHay(boolean eatingHay) { this.eatingHay = eatingHay; } public boolean hasReproduced() { return hasReproduced; } public void setHasReproduced(boolean hasReproduced) { this.hasReproduced = hasReproduced; } public int getTemper() { return temper; } public void setTemper(int temper) { this.temper = temper; } @Override public List<Message> createSpawnMessage() { List<Message> messages = super.createSpawnMessage(); MetadataMap map = new MetadataMap(GlowHorse.class); map.set(MetadataIndex.HORSE_STYLE, getHorseStyleData()); map.set(MetadataIndex.HORSE_ARMOR, getHorseArmorData()); messages.add(new EntityMetadataMessage(id, map.getEntryList())); return messages; } private int getHorseStyleData() { return horseColor.ordinal() & 0xFF | horseStyle.ordinal() << 8; } private int getHorseArmorData() { if (getInventory().getArmor() != null) { if (getInventory().getArmor().getType() == Material.DIAMOND_BARDING) { return 3; } else if (getInventory().getArmor().getType() == Material.GOLD_BARDING) { return 2; } else if (getInventory().getArmor().getType() == Material.IRON_BARDING) { return 1; } } return 0; } @Override protected Sound getHurtSound() { return Sound.ENTITY_HORSE_HURT; } @Override protected Sound getDeathSound() { return Sound.ENTITY_HORSE_DEATH; } @Override protected Sound getAmbientSound() { return Sound.ENTITY_HORSE_AMBIENT; } }