summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java86
1 files changed, 67 insertions, 19 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
index 7bcb75be..ffd46dc6 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
@@ -3,10 +3,14 @@ package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityWolf;
import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.AnimalTamer;
+import org.bukkit.entity.Player;
import org.bukkit.entity.Wolf;
import net.minecraft.server.PathEntity;
public class CraftWolf extends CraftAnimals implements Wolf {
+ private AnimalTamer owner;
+
public CraftWolf(CraftServer server, EntityWolf wolf) {
super(server, wolf);
}
@@ -25,41 +29,85 @@ public class CraftWolf extends CraftAnimals implements Wolf {
public void setSitting(boolean sitting) {
getHandle().setSitting(sitting);
+ // TODO determine what the following would do - it is affected every time a player makes their wolf sit or stand
+ //getHandle().ay = false;
+ setPath((PathEntity) null);
}
- public boolean isTame() {
+ public boolean isTamed() {
return getHandle().m_();
}
-
- public void setTame(boolean tame) {
+
+ public void setTamed(boolean tame) {
getHandle().d(tame);
}
-
- public String getOwner() {
- return getHandle().x();
- }
-
- public void setOwner(String player) {
- EntityWolf e = getHandle();
-
- if ((player != null) && (player.length() > 0)) {
- e.d(true); /* Make him tame */
- e.a((PathEntity)null); /* Clear path */
- e.a(player); /* Set owner */
+
+ public AnimalTamer getOwner() {
+ // If the wolf has a previously set owner use that, otherwise try and find the player who owns it
+ if (owner == null) {
+ // TODO try and recover owner from persistence store before defaulting to playername
+ owner = getServer().getPlayer(getOwnerName());
}
- else {
- e.d(false); /* Make him not tame */
- e.a(""); /* Clear owner */
+ return owner;
+ }
+
+ public void setOwner(AnimalTamer tamer) {
+ owner = tamer;
+ if (owner != null) {
+ setTamed(true); /* Make him tame */
+ setPath((PathEntity) null); /* Clear path */
+ /* Set owner */
+ // TODO persist owner to the persistence store
+ if (owner instanceof Player) {
+ setOwnerName(((Player) owner).getName());
+ } else {
+ setOwnerName("");
+ }
+ } else {
+ setTamed(false); /* Make him not tame */
+ setOwnerName(""); /* Clear owner */
}
}
+ /**
+ * The owner's name is how MC knows and persists the Wolf's owner. Since we choose to instead use an AnimalTamer, this functionality
+ * is used only as a backup. If the animal tamer is a player, we will store their name, otherwise we store an empty string.
+ * @return the owner's name, if they are a player; otherwise, the empty string or null.
+ */
+ String getOwnerName() {
+ return getHandle().x();
+ }
+
+ void setOwnerName(String ownerName) {
+ getHandle().a(ownerName);
+ }
+
+ /**
+ * Only used internally at the moment, and there to set the path to null (that is stop the thing from running around)
+ * TODO use this later to extend the API, when we have Path classes in Bukkit
+ * @param pathentity currently the MC defined PathEntity class. Should be replaced with an API interface at some point.
+ */
+ private void setPath(PathEntity pathentity) {
+ getHandle().a(pathentity);
+ }
+
+ /*
+ * This method requires a(boolean) to be made visible. It will allow for hearts to be animated on a successful taming.
+ * TODO add this to the API, and make it visible
+ private void playTamingAnimation(boolean successful){
+ getHandle().a(successful);
+ }
+ */
+
@Override
public EntityWolf getHandle() {
+ // It's somewhat easier to override this here, as many internal methods rely on EntityWolf specific methods.
+ // Doing this has no impact on anything outside this class.
return (EntityWolf) entity;
}
@Override
public String toString() {
- return "CraftWolf[anger=" + isAngry() + ",owner=" + getOwner() + ",tame=" + isTame() + ",sitting=" + isSitting() + "]";
+ return "CraftWolf[anger=" + isAngry() + ",owner=" + getOwner() + ",tame=" + isTamed() + ",sitting=" + isSitting() + "]";
}
}