Added methods and changed internals for flag watchers.
This commit is contained in:
		| @@ -7,12 +7,6 @@ public class HorseWatcher extends AgeableWatcher { | ||||
|     public HorseWatcher(int entityId) { | ||||
|         super(entityId); | ||||
|         setValue(16, 0); | ||||
|         // Horse types (19) are | ||||
|         // Horse | ||||
|         // Donkey | ||||
|         // Mule | ||||
|         // Zombie | ||||
|         // Skeleton | ||||
|         setValue(19, (byte) 0); | ||||
|         setValue(20, new Random().nextInt(7)); | ||||
|         setValue(21, ""); | ||||
| @@ -27,14 +21,86 @@ public class HorseWatcher extends AgeableWatcher { | ||||
|         return (int) (Byte) getValue(19); | ||||
|     } | ||||
|  | ||||
|     public boolean hasChest() { | ||||
|         return isTrue(8); | ||||
|     } | ||||
|  | ||||
|     public boolean isBredable() { | ||||
|         return isTrue(16); | ||||
|     } | ||||
|  | ||||
|     public boolean isGrazing() { | ||||
|         return isTrue(32); | ||||
|     } | ||||
|  | ||||
|     public boolean isMouthOpen() { | ||||
|         return isTrue(128); | ||||
|     } | ||||
|  | ||||
|     public boolean isRearing() { | ||||
|         return isTrue(64); | ||||
|     } | ||||
|  | ||||
|     public boolean isSaddled() { | ||||
|         return isTrue(4); | ||||
|     } | ||||
|  | ||||
|     public boolean isTamed() { | ||||
|         return isTrue(2); | ||||
|     } | ||||
|  | ||||
|     private boolean isTrue(int i) { | ||||
|         return ((Integer) getValue(16) & i) != 0; | ||||
|     } | ||||
|  | ||||
|     public void setCanBred(boolean bred) { | ||||
|         setFlag(16, bred); | ||||
|     } | ||||
|  | ||||
|     public void setCarryingChest(boolean chest) { | ||||
|         setFlag(8, true); | ||||
|     } | ||||
|  | ||||
|     public void setColoring(int color) { | ||||
|         setValue(20, color); | ||||
|         sendData(20); | ||||
|     } | ||||
|  | ||||
|     private void setFlag(int i, boolean flag) { | ||||
|         if (isTrue(i) != flag) { | ||||
|             int j = (Integer) getValue(16); | ||||
|             if (flag) { | ||||
|                 setValue(16, j | i); | ||||
|             } else { | ||||
|                 setValue(16, j & ~i); | ||||
|             } | ||||
|             sendData(16); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setGrazing(boolean grazing) { | ||||
|         setFlag(32, grazing); | ||||
|     } | ||||
|  | ||||
|     public void setHorseType(int type) { | ||||
|         setValue(19, (byte) type); | ||||
|         sendData(19); | ||||
|     } | ||||
|  | ||||
|     public void setMouthOpen(boolean mouthOpen) { | ||||
|         setFlag(128, mouthOpen); | ||||
|     } | ||||
|  | ||||
|     public void setRearing(boolean rear) { | ||||
|         setFlag(64, true); | ||||
|     } | ||||
|  | ||||
|     public void setSaddled(boolean saddled) { | ||||
|         setFlag(4, saddled); | ||||
|     } | ||||
|  | ||||
|     public void setTamed(boolean tamed) { | ||||
|         setFlag(2, tamed); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -4,9 +4,6 @@ import org.bukkit.entity.Ocelot; | ||||
| import org.bukkit.entity.Ocelot.Type; | ||||
|  | ||||
| public class OcelotWatcher extends AgeableWatcher { | ||||
|     private boolean isSitting; | ||||
|     private boolean isTamed; | ||||
|     private Type type = Ocelot.Type.WILD_OCELOT; | ||||
|  | ||||
|     public OcelotWatcher(int entityId) { | ||||
|         super(entityId); | ||||
| @@ -14,13 +11,29 @@ public class OcelotWatcher extends AgeableWatcher { | ||||
|         setValue(17, ""); | ||||
|         setValue(18, (byte) 0); | ||||
|     } | ||||
|      | ||||
|  | ||||
|     public String getOwner() { | ||||
|         return (String) getValue(17); | ||||
|     } | ||||
|      | ||||
|  | ||||
|     public Type getType() { | ||||
|         return type; | ||||
|         return Ocelot.Type.getType((Byte) getValue(18)); | ||||
|     } | ||||
|  | ||||
|     private boolean isTrue(int no) { | ||||
|         return ((Byte) getValue(16) & no) != 0; | ||||
|     } | ||||
|  | ||||
|     private void setFlag(int no, boolean flag) { | ||||
|         if (isTrue(no) != flag) { | ||||
|             byte b0 = (Byte) getValue(16); | ||||
|             if (flag) { | ||||
|                 setValue(16, (byte) (b0 | (no))); | ||||
|             } else { | ||||
|                 setValue(16, (byte) (b0 & -(no + 1))); | ||||
|             } | ||||
|             sendData(16); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setOwner(String newOwner) { | ||||
| @@ -28,29 +41,17 @@ public class OcelotWatcher extends AgeableWatcher { | ||||
|     } | ||||
|  | ||||
|     public void setSitting(boolean sitting) { | ||||
|         if (isSitting != sitting) { | ||||
|             isSitting = sitting; | ||||
|             updateStatus(); | ||||
|         } | ||||
|         setFlag(1, sitting); | ||||
|     } | ||||
|  | ||||
|     public void setTamed(boolean tamed) { | ||||
|         if (isTamed != tamed) { | ||||
|             isTamed = tamed; | ||||
|             updateStatus(); | ||||
|         } | ||||
|         setFlag(4, tamed); | ||||
|     } | ||||
|  | ||||
|     public void setType(Type newType) { | ||||
|         if (type != newType) { | ||||
|             type = newType; | ||||
|             setValue(18, (byte) type.getId()); | ||||
|         if (getType() != newType) { | ||||
|             setValue(18, (byte) newType.getId()); | ||||
|             sendData(18); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void updateStatus() { | ||||
|         setValue(16, (byte) ((isSitting ? 1 : 0) + (isTamed ? 4 : 0))); | ||||
|         sendData(16); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -3,31 +3,37 @@ package me.libraryaddict.disguise.DisguiseTypes.Watchers; | ||||
| import me.libraryaddict.disguise.DisguiseTypes.AnimalColor; | ||||
|  | ||||
| public class SheepWatcher extends AgeableWatcher { | ||||
|     private AnimalColor color = AnimalColor.WHITE; | ||||
|     private boolean isSheared; | ||||
|  | ||||
|     public SheepWatcher(int entityId) { | ||||
|         super(entityId); | ||||
|         setValue(16, (byte) 0); | ||||
|     } | ||||
|  | ||||
|     public AnimalColor getColor() { | ||||
|         return AnimalColor.values()[(Byte) getValue(16) & 15]; | ||||
|     } | ||||
|  | ||||
|     public boolean isSheared() { | ||||
|         return isSheared; | ||||
|         return ((Byte) getValue(16) & 16) != 0; | ||||
|     } | ||||
|  | ||||
|     public void setColor(AnimalColor newColor) { | ||||
|         if (color != newColor) { | ||||
|             setValue(16, (byte) (newColor.getId() + (isSheared ? 16 : 0))); | ||||
|     public void setColor(AnimalColor color) { | ||||
|         if (getColor() != color) { | ||||
|             byte b0 = (Byte) getValue(16); | ||||
|             setValue(16, (byte) (b0 & 240 | color.getId() & 15)); | ||||
|             sendData(16); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setSheared(boolean sheared) { | ||||
|         if (sheared != isSheared) { | ||||
|             isSheared = sheared; | ||||
|             setValue(16, (byte) (color.getId() + (isSheared ? 16 : 0))); | ||||
|     public void setSheared(boolean flag) { | ||||
|         if (isSheared() != flag) { | ||||
|             byte b0 = (Byte) getValue(16); | ||||
|             if (flag) { | ||||
|                 setValue(16, (byte) (b0 | 16)); | ||||
|             } else { | ||||
|                 setValue(16, (byte) (b0 & -17)); | ||||
|             } | ||||
|             sendData(16); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -5,18 +5,19 @@ import java.util.Random; | ||||
| import org.bukkit.entity.Villager.Profession; | ||||
|  | ||||
| public class VillagerWatcher extends AgeableWatcher { | ||||
|     private Profession profession; | ||||
|  | ||||
|     public VillagerWatcher(int entityId) { | ||||
|         super(entityId); | ||||
|         profession = Profession.values()[new Random().nextInt(Profession.values().length)]; | ||||
|         setValue(16, profession.getId()); | ||||
|         setValue(16, Profession.values()[new Random().nextInt(Profession.values().length)].getId()); | ||||
|     } | ||||
|  | ||||
|     public Profession getProfession() { | ||||
|         return Profession.values()[(Integer) getValue(16)]; | ||||
|     } | ||||
|  | ||||
|     public void setProfession(Profession newProfession) { | ||||
|         if (profession != newProfession) { | ||||
|             profession = newProfession; | ||||
|             setValue(16, profession.getId()); | ||||
|         if (getProfession() != newProfession) { | ||||
|             setValue(16, newProfession.getId()); | ||||
|             sendData(16); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -3,10 +3,6 @@ package me.libraryaddict.disguise.DisguiseTypes.Watchers; | ||||
| import me.libraryaddict.disguise.DisguiseTypes.AnimalColor; | ||||
|  | ||||
| public class WolfWatcher extends AgeableWatcher { | ||||
|     private AnimalColor collarColor = AnimalColor.RED; | ||||
|     private boolean isAgressive; | ||||
|     private boolean isSitting; | ||||
|     private boolean isTamed; | ||||
|  | ||||
|     public WolfWatcher(int entityId) { | ||||
|         super(entityId); | ||||
| @@ -14,11 +10,11 @@ public class WolfWatcher extends AgeableWatcher { | ||||
|         setValue(17, ""); | ||||
|         setValue(18, 8F); | ||||
|         setValue(19, (byte) 0); | ||||
|         setValue(20, (byte) collarColor.getId()); | ||||
|         setValue(20, (byte) 14); | ||||
|     } | ||||
|  | ||||
|     public AnimalColor getCollarColor() { | ||||
|         return collarColor; | ||||
|         return AnimalColor.values()[(Byte) getValue(20)]; | ||||
|     } | ||||
|  | ||||
|     public float getHealth() { | ||||
| @@ -29,55 +25,56 @@ public class WolfWatcher extends AgeableWatcher { | ||||
|         return (String) getValue(17); | ||||
|     } | ||||
|  | ||||
|     public boolean isAgressive() { | ||||
|         return isAgressive; | ||||
|     public boolean isAngry() { | ||||
|         return isTrue(2); | ||||
|     } | ||||
|  | ||||
|     public boolean isSitting() { | ||||
|         return isSitting; | ||||
|         return isTrue(1); | ||||
|     } | ||||
|  | ||||
|     public boolean isTamed() { | ||||
|         return isTamed; | ||||
|         return isTrue(4); | ||||
|     } | ||||
|  | ||||
|     public void setAgressive(boolean aggressive) { | ||||
|         if (isAgressive != aggressive) { | ||||
|             isAgressive = aggressive; | ||||
|             updateStatus(); | ||||
|         } | ||||
|     private boolean isTrue(int no) { | ||||
|         return ((Byte) getValue(16) & no) != 0; | ||||
|     } | ||||
|  | ||||
|     public void setAngry(boolean angry) { | ||||
|         setFlag(2, angry); | ||||
|     } | ||||
|  | ||||
|     public void setCollarColor(AnimalColor newColor) { | ||||
|         if (newColor != collarColor) { | ||||
|             collarColor = newColor; | ||||
|         if (newColor != getCollarColor()) { | ||||
|             setValue(20, (byte) newColor.getId()); | ||||
|             sendData(20); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void setFlag(int no, boolean flag) { | ||||
|         if (isTrue(no) != flag) { | ||||
|             byte b0 = (Byte) getValue(16); | ||||
|             if (flag) { | ||||
|                 setValue(16, (byte) (b0 | (no))); | ||||
|             } else { | ||||
|                 setValue(16, (byte) (b0 & -(no + 1))); | ||||
|             } | ||||
|             sendData(16); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setHealth(float newHealth) { | ||||
|         setValue(18, newHealth); | ||||
|         sendData(18); | ||||
|     } | ||||
|  | ||||
|     public void setSitting(boolean sitting) { | ||||
|         if (isSitting != sitting) { | ||||
|             isSitting = sitting; | ||||
|             updateStatus(); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     public void setTamed(boolean tamed) { | ||||
|         if (isTamed != tamed) { | ||||
|             isTamed = tamed; | ||||
|             updateStatus(); | ||||
|         } | ||||
|         setFlag(1, sitting); | ||||
|     } | ||||
|  | ||||
|     private void updateStatus() { | ||||
|         setValue(16, (byte) ((isTamed ? 4 : 0) + (isSitting ? 1 : 0) + (isAgressive ? 2 : 0))); | ||||
|         sendData(16); | ||||
|     public void setTamed(boolean tamed) { | ||||
|         setFlag(4, tamed); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user