package com.laytonsmith.abstraction.bukkit.entities; import com.laytonsmith.abstraction.Implementation; import com.laytonsmith.abstraction.MCInventory; import com.laytonsmith.abstraction.MCItemStack; import com.laytonsmith.abstraction.bukkit.BukkitMCInventory; import com.laytonsmith.abstraction.bukkit.BukkitMCItemStack; import com.laytonsmith.abstraction.entities.MCHorse; import com.laytonsmith.abstraction.enums.EnumConvertor; import com.laytonsmith.annotations.abstractionenum; import com.laytonsmith.core.CHLog; import com.laytonsmith.core.LogLevel; import com.laytonsmith.core.constructs.Target; import org.bukkit.entity.Entity; import org.bukkit.entity.Horse; /** * * @author jb_aero */ public class BukkitMCHorse extends BukkitMCTameable implements MCHorse { Horse h; public BukkitMCHorse(Entity t) { super(t); this.h = (Horse) t; } @Override public MCInventory getInventory() { return new BukkitMCInventory(h.getInventory()); } @Override public MCHorseVariant getVariant() { return BukkitMCHorseVariant.getConvertor().getAbstractedEnum(h.getVariant()); } @Override public MCHorseColor getColor() { return BukkitMCHorseColor.getConvertor().getAbstractedEnum(h.getColor()); } @Override public MCHorsePattern getPattern() { return BukkitMCHorsePattern.getConvertor().getAbstractedEnum(h.getStyle()); } @Override public void setVariant(MCHorseVariant variant) { try { h.setVariant(BukkitMCHorseVariant.getConvertor().getConcreteEnum(variant)); } catch(UnsupportedOperationException ex){ // 1.11 or later CHLog.GetLogger().Log(CHLog.Tags.DEPRECATION, LogLevel.ERROR, "Cannot change Horse variant in Minecraft 1.11+", Target.UNKNOWN); } } @Override public void setColor(MCHorseColor color) { h.setColor(BukkitMCHorseColor.getConvertor().getConcreteEnum(color)); } @Override public void setPattern(MCHorsePattern pattern) { h.setStyle(BukkitMCHorsePattern.getConvertor().getConcreteEnum(pattern)); } @Override public double getJumpStrength() { return h.getJumpStrength(); } @Override public void setJumpStrength(double strength) { h.setJumpStrength(strength); } @Override public boolean hasChest() { return h.isCarryingChest(); } @Override public void setHasChest(boolean hasChest) { try { h.setCarryingChest(hasChest); } catch(UnsupportedOperationException ex){ // 1.11 or later CHLog.GetLogger().Log(CHLog.Tags.DEPRECATION, LogLevel.ERROR, "Horse cannot have chest in Minecraft 1.11+", Target.UNKNOWN); } } @Override public int getDomestication() { return h.getDomestication(); } @Override public int getMaxDomestication() { return h.getMaxDomestication(); } @Override public void setDomestication(int level) { h.setDomestication(level); } @Override public void setMaxDomestication(int level) { h.setMaxDomestication(level); } @Override public void setSaddle(MCItemStack stack) { h.getInventory().setSaddle(((BukkitMCItemStack)stack).asItemStack()); } @Override public MCItemStack getSaddle() { return new BukkitMCItemStack(h.getInventory().getSaddle()); } @Override public void setArmor(MCItemStack stack) { h.getInventory().setArmor(((BukkitMCItemStack)stack).asItemStack()); } @Override public MCItemStack getArmor() { return new BukkitMCItemStack(h.getInventory().getArmor()); } @abstractionenum( implementation= Implementation.Type.BUKKIT, forAbstractEnum=MCHorseVariant.class, forConcreteEnum=Horse.Variant.class ) public static class BukkitMCHorseVariant extends EnumConvertor<MCHorseVariant, Horse.Variant>{ private static BukkitMCHorseVariant instance; public static BukkitMCHorseVariant getConvertor() { if (instance == null) { instance = new BukkitMCHorseVariant(); } return instance; } @Override protected MCHorseVariant getAbstractedEnumCustom(Horse.Variant concrete) { switch (concrete) { case SKELETON_HORSE: return MCHorseVariant.SKELETON; case UNDEAD_HORSE: return MCHorseVariant.ZOMBIE; case LLAMA: return MCHorseVariant.HORSE; } return super.getAbstractedEnumCustom(concrete); } @Override protected Horse.Variant getConcreteEnumCustom(MCHorseVariant abstracted) { switch (abstracted) { case SKELETON: return Horse.Variant.SKELETON_HORSE; case ZOMBIE: return Horse.Variant.UNDEAD_HORSE; } return super.getConcreteEnumCustom(abstracted); } } @abstractionenum( implementation= Implementation.Type.BUKKIT, forAbstractEnum=MCHorseColor.class, forConcreteEnum=Horse.Color.class ) public static class BukkitMCHorseColor extends EnumConvertor<MCHorseColor, Horse.Color>{ private static BukkitMCHorseColor instance; public static BukkitMCHorseColor getConvertor() { if (instance == null) { instance = new BukkitMCHorseColor(); } return instance; } } @abstractionenum( implementation= Implementation.Type.BUKKIT, forAbstractEnum=MCHorsePattern.class, forConcreteEnum=Horse.Style.class ) public static class BukkitMCHorsePattern extends EnumConvertor<MCHorsePattern, Horse.Style>{ private static BukkitMCHorsePattern instance; public static BukkitMCHorsePattern getConvertor() { if (instance == null) { instance = new BukkitMCHorsePattern(); } return instance; } @Override protected MCHorsePattern getAbstractedEnumCustom(Horse.Style concrete) { switch (concrete) { case WHITE: return MCHorsePattern.SOCKS; } return super.getAbstractedEnumCustom(concrete); } @Override protected Horse.Style getConcreteEnumCustom(MCHorsePattern abstracted) { switch (abstracted) { case SOCKS: return Horse.Style.WHITE; } return super.getConcreteEnumCustom(abstracted); } } }