package net.CyanWool.entity.player;
import net.CyanWool.api.SoundInfo;
import net.CyanWool.api.entity.EntityType;
import net.CyanWool.api.entity.component.FoodComponent;
import net.CyanWool.api.entity.component.HealthComponent;
import net.CyanWool.api.entity.component.XPComponent;
import net.CyanWool.api.entity.player.Human;
import net.CyanWool.api.inventory.Inventory;
import net.CyanWool.api.inventory.ItemStack;
import net.CyanWool.api.inventory.inventories.PlayerInventory;
import net.CyanWool.api.world.Location;
import net.CyanWool.entity.CyanEntityLivingBase;
import net.CyanWool.inventory.inventories.CyanPlayerInventory;
import org.spacehq.mc.auth.GameProfile;
import org.spacehq.mc.protocol.data.game.values.entity.player.GameMode;
import org.spacehq.mc.protocol.data.game.values.world.GenericSound;
public abstract class CyanHuman extends CyanEntityLivingBase implements Human {
private GameProfile profile;
private boolean sleeping;
private int sleepingTicks;
private boolean blocking;
private float xpInBar;
private boolean disableDamage;
private boolean isFlying;
private boolean isAllowFlying;
private boolean isCreative;
private float flySpeed;
private float walkSpeed;
private boolean canBuild;
private Inventory viewInventory;
private GameMode gameMode;
private PlayerInventory inventory;
public CyanHuman(GameProfile profile, Location location) {
super(location);// TODO
this.profile = profile;
getComponentManager().removeComponent("ai");
getComponentManager().addComponent(new FoodComponent(this, 20)); // ???
getComponentManager().addComponent(new XPComponent(this));
CyanPlayerInventory inv = new CyanPlayerInventory(getName());
this.inventory = inv;
setDamageSound(new SoundInfo(GenericSound.PLAYER_HURT, 1.0F, 1.0F));
((HealthComponent) getComponentManager().getComponent("health")).setMaxHealth(20);
((HealthComponent) getComponentManager().getComponent("health")).setHealth(20);
}
@Override
public String getName() {
return profile.getName();
}
@Override
public boolean hasItemInHand() {
return getInventory().getItemInHand() != null;
}
@Override
public void setItemInHand(ItemStack item) {
getInventory().setItemInHand(item);
}
@Override
public boolean isSleeping() {
return sleeping;
}
@Override
public boolean isBlocking() {
return blocking;
}
@Override
public void sleepInBedAt(int x, int y, int z) {
// TODO Auto-generated method stub
}
@Override
public void closeInventory() {
if (viewInventory != null) {
viewInventory.closeInventory(this);
viewInventory = null;
}
}
@Override
public float getXPInBar() {
return xpInBar;
}
@Override
public void setXPInBar(float xp) {
this.xpInBar = xp;
}
@Override
public boolean isDisableDamage() {
return disableDamage;
}
@Override
public void setDisableDamage(boolean flag) {
this.disableDamage = flag;
}
@Override
public boolean isFlying() {
return isFlying;
}
@Override
public void setFlying(boolean flag) {
this.isFlying = flag;
}
@Override
public boolean isAllowFlying() {
return isAllowFlying;
}
@Override
public void setAllowFlying(boolean flag) {
this.isAllowFlying = flag;
}
@Override
public boolean isCreativeMode() {
return isCreative;
}
@Override
public float getFlySpeed() {
return flySpeed;
}
@Override
public void setFlySpeed(float speed) {
this.flySpeed = speed;
}
@Override
public float getWalkSpeed() {
return walkSpeed;
}
@Override
public void setWalkSpeed(float speed) {
this.walkSpeed = speed;
}
@Override
public boolean canBuild() {
return canBuild;
}
@Override
public void setBuild(boolean flag) {
this.canBuild = flag;
}
@Override
public void wakeUp() {
this.sleeping = false;
this.sleepingTicks = 0;
// todo...
}
@Override
public Inventory getViewInventory() {
return viewInventory;
}
@Override
public Inventory getEnderChest() {
return null;// TODO ?
}
@Override
public void openInventory(Inventory inventory) {
closeInventory();
inventory.openInventory(this);
viewInventory = inventory;
}
@Override
public GameMode getGameMode() {
return gameMode;
}
@Override
public void setGamemode(GameMode mode) {
this.gameMode = mode;
}
@Override
public EntityType getEntityType() {
return EntityType.PLAYER;
}
@Override
public int getSleepingTicks() {
return sleepingTicks;
}
@Override
public void setSleepingTicks(int ticks) {
this.sleepingTicks = ticks;
}
@Override
public void onTick() {
super.onTick();
if (sleeping) {
++sleepingTicks;
} else {
sleepingTicks = 0;
}
}
// Not from API
public GameProfile getGameProfile() {
return profile;
}
@Override
public boolean isNeedFood() {
FoodComponent component = (FoodComponent) getComponentManager().getComponent("food");
return component.getFoodLevel() < 20;
}
@Override
public int getFoodLevel() {
FoodComponent component = (FoodComponent) getComponentManager().getComponent("food");
return component.getFoodLevel();
}
@Override
public void setFoodLevel(int level) {
FoodComponent component = (FoodComponent) getComponentManager().getComponent("food");
component.setFoodLevel(level);
}
@Override
public int getXPLevel() {
XPComponent component = (XPComponent) getComponentManager().getComponent("xp");
return component.getXPLevel();
}
@Override
public int getXPTotal() {
XPComponent component = (XPComponent) getComponentManager().getComponent("xp");
return component.getXPTotal();
}
@Override
public void setXPLevel(int level) {
XPComponent component = (XPComponent) getComponentManager().getComponent("xp");
component.setXPLevel(level);
}
@Override
public void setXPTotal(int xp) {
XPComponent component = (XPComponent) getComponentManager().getComponent("xp");
component.setXPTotal(xp);
}
@Override
public PlayerInventory getInventory() {
return inventory;
}
}