package net.glowstone.entity.passive;
import net.glowstone.entity.GlowAnimal;
import net.glowstone.entity.meta.MetadataIndex;
import net.glowstone.entity.meta.MetadataIndex.TameableFlags;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.AnimalTamer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable;
import java.util.UUID;
public abstract class GlowTameable extends GlowAnimal implements Tameable {
protected boolean tamed;
private AnimalTamer owner;
private UUID ownerUUId;
private boolean sitting;
private MetadataIndex status = MetadataIndex.TAMEABLEAANIMAL_STATUS;
private MetadataIndex ownerMetadata = MetadataIndex.TAMEABLEANIMAL_OWNER;
public GlowTameable(Location location, EntityType type, double maxHealth) {
super(location, type, maxHealth);
}
protected GlowTameable(Location location, EntityType type, double maxHealth, AnimalTamer owner) {
super(location, type, maxHealth);
if (owner != null) {
this.owner = owner;
metadata.set(ownerMetadata, owner.getUniqueId());
}
}
@Override
public boolean isTamed() {
return tamed;
}
@Override
public void setTamed(boolean isTamed) {
metadata.setBit(status, TameableFlags.IS_TAME, isTamed); //TODO 1.9 The flag might need change
tamed = isTamed;
}
@Override
public AnimalTamer getOwner() {
return owner instanceof Player ? owner : Bukkit.getPlayer(ownerUUId);
}
@Override
public void setOwner(AnimalTamer animalTamer) {
if (animalTamer == null) {
owner = null;
ownerUUId = null;
return;
}
owner = animalTamer;
ownerUUId = animalTamer.getUniqueId();
metadata.set(ownerMetadata, owner.getUniqueId());
}
public UUID getOwnerUUID() {
return ownerUUId;
}
/**
* Added needed method for Storage to convert from UUID to owners.
* The UUID's are validated through offline player checking. If a player
* with the specified UUID has not played on the server before, the
* owner is not set.
*
* @param ownerUUID The player UUID of the owner.
*/
public void setOwnerUUID(UUID ownerUUID) {
if (ownerUUID == null) {
ownerUUId = null;
return;
}
OfflinePlayer player = Bukkit.getOfflinePlayer(ownerUUId);
if (player != null && player.hasPlayedBefore()) {
ownerUUId = ownerUUID;
}
}
public boolean isSitting() {
return sitting;
}
public void setSitting(boolean isSitting) {
metadata.setBit(status, TameableFlags.IS_SITTING, isSitting); //TODO 1.9 - This flag might need change
sitting = isSitting;
}
}