package net.glowstone.entity.passive; 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 org.bukkit.*; import org.bukkit.entity.EntityType; import org.bukkit.entity.Sheep; import org.bukkit.event.entity.SheepDyeWoolEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.material.Dye; import java.util.Random; public class GlowSheep extends GlowAnimal implements Sheep { private boolean sheared; private DyeColor color; public GlowSheep(Location location) { super(location, EntityType.SHEEP, 8); setSize(0.9F, 1.3F); Random r = new Random(); int colorpc = r.nextInt(10000); if (colorpc < 8184) { setColor(DyeColor.WHITE); } else if (colorpc >= 8184 && 8684 > colorpc) { setColor(DyeColor.BLACK); } else if (colorpc >= 8684 && 9184 > colorpc) { setColor(DyeColor.SILVER); } else if (colorpc >= 9184 && 9684 > colorpc) { setColor(DyeColor.GRAY); } else if (colorpc >= 9684 && 9984 > colorpc) { setColor(DyeColor.BROWN); } else { setColor(DyeColor.PINK); } setSheared(false); // todo implement the regrow of wool } @Override public boolean isSheared() { return sheared; } @Override public void setSheared(boolean sheared) { this.sheared = sheared; metadata.set(MetadataIndex.SHEEP_DATA, getColorByte()); } @Override public DyeColor getColor() { return color; } @Override public void setColor(DyeColor dyeColor) { color = dyeColor; metadata.set(MetadataIndex.SHEEP_DATA, getColorByte()); } private byte getColorByte() { return (byte) (getColor().getWoolData() | (sheared ? 0x10 : 0x00)); } @Override public boolean entityInteract(GlowPlayer player, InteractEntityMessage message) { super.entityInteract(player, message); if (!isAdult()) return false; if (player.getGameMode().equals(GameMode.SPECTATOR)) return false; if (player.getItemInHand() == null) return false; switch (player.getItemInHand().getType()) { case SHEARS: if (isSheared()) return false; if (!player.getGameMode().equals(GameMode.CREATIVE)) { ItemStack shears = player.getItemInHand(); if (shears.getDurability() < 238) { shears.setDurability((short) (shears.getDurability() + 1)); } else { player.getInventory().clear(player.getInventory().getHeldItemSlot()); } } getWorld().playSound(getLocation(), Sound.ENTITY_SHEEP_SHEAR, 1, 1); Random r = new Random(); getWorld().dropItemNaturally(getLocation(), new ItemStack(Material.WOOL, r.nextInt(3) + 1, getColor().getWoolData())); setSheared(true); return true; case INK_SACK: { Dye dye = (Dye) player.getItemInHand().getData(); DyeColor color = dye.getColor(); SheepDyeWoolEvent event = new SheepDyeWoolEvent(this, color); if (event.isCancelled()) return false; color = event.getColor(); if (color.equals(getColor())) { return false; } if (!player.getGameMode().equals(GameMode.CREATIVE)) { if (player.getItemInHand().getAmount() > 1) { player.getItemInHand().setAmount(player.getItemInHand().getAmount() - 1); } else { player.getInventory().clear(player.getInventory().getHeldItemSlot()); } } setColor(color); return true; } default: return false; } } @Override protected Sound getHurtSound() { return Sound.ENTITY_SHEEP_HURT; } @Override protected Sound getDeathSound() { return Sound.ENTITY_SHEEP_DEATH; } @Override protected Sound getAmbientSound() { return Sound.ENTITY_SHEEP_AMBIENT; } }