summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFearThe137 <admin@fearthe1337.com>2014-12-06 22:45:51 +0100
committermd_5 <git@md-5.net>2014-12-24 09:11:25 +1100
commit2db3ea29a650c045fdaf155d636dbd77a07fa21f (patch)
tree5d1a585e9de82baefa1657b2215a92dbc4b5fb6e
parent81ab957aa53278e8642b0b30ec6aacc9d42fcd4e (diff)
downloadcraftbukkit-2db3ea29a650c045fdaf155d636dbd77a07fa21f.tar
craftbukkit-2db3ea29a650c045fdaf155d636dbd77a07fa21f.tar.gz
craftbukkit-2db3ea29a650c045fdaf155d636dbd77a07fa21f.tar.lz
craftbukkit-2db3ea29a650c045fdaf155d636dbd77a07fa21f.tar.xz
craftbukkit-2db3ea29a650c045fdaf155d636dbd77a07fa21f.zip
Implement Rabbit types.
-rw-r--r--nms-patches/EntityInsentient.patch17
-rw-r--r--nms-patches/EntityRabbit.patch25
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java67
3 files changed, 105 insertions, 4 deletions
diff --git a/nms-patches/EntityInsentient.patch b/nms-patches/EntityInsentient.patch
index 1672b0e4..36f6f715 100644
--- a/nms-patches/EntityInsentient.patch
+++ b/nms-patches/EntityInsentient.patch
@@ -1,5 +1,5 @@
---- ../work/decompile-8eb82bde//net/minecraft/server/EntityInsentient.java 2014-11-28 17:43:43.105707435 +0000
-+++ src/main/java/net/minecraft/server/EntityInsentient.java 2014-11-28 17:38:23.000000000 +0000
+--- ../work/decompile-8eb82bde//net/minecraft/server/EntityInsentient.java Sat Dec 6 21:48:11 2014
++++ src/main/java/net/minecraft/server/EntityInsentient.java Sat Dec 6 21:18:38 2014
@@ -4,6 +4,15 @@
import java.util.List;
import java.util.UUID;
@@ -16,6 +16,17 @@
public abstract class EntityInsentient extends EntityLiving {
public int a_;
+@@ -13,8 +22,8 @@
+ protected ControllerJump g;
+ private EntityAIBodyControl b;
+ protected NavigationAbstract navigation;
+- protected final PathfinderGoalSelector goalSelector;
+- protected final PathfinderGoalSelector targetSelector;
++ public PathfinderGoalSelector goalSelector; // PAIL protected final to public
++ public PathfinderGoalSelector targetSelector; // PAIL protected final to public
+ private EntityLiving goalTarget;
+ private EntitySenses bi;
+ private ItemStack[] equipment = new ItemStack[5];
@@ -39,7 +48,9 @@
for (int i = 0; i < this.dropChances.length; ++i) {
this.dropChances[i] = 0.085F;
@@ -161,4 +172,4 @@
+ this.world.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN)); // CraftBukkit
this.unleash(false, true);
}
- }
+ } \ No newline at end of file
diff --git a/nms-patches/EntityRabbit.patch b/nms-patches/EntityRabbit.patch
new file mode 100644
index 00000000..27893375
--- /dev/null
+++ b/nms-patches/EntityRabbit.patch
@@ -0,0 +1,25 @@
+--- ../work/decompile-8eb82bde//net/minecraft/server/EntityRabbit.java Sat Dec 6 21:44:10 2014
++++ src/main/java/net/minecraft/server/EntityRabbit.java Sat Dec 6 21:33:23 2014
+@@ -21,6 +21,12 @@
+ this.g = new ControllerJumpRabbit(this, this);
+ this.moveController = new ControllerMoveRabbit(this);
+ ((Navigation) this.getNavigation()).a(true);
++ this.initializePathFinderGoals(); // CraftBukkit - moved code
++ this.b(0.0D);
++ }
++
++ // CraftBukkit start - code from constructor
++ public void initializePathFinderGoals(){
+ this.navigation.a(2.5F);
+ this.goalSelector.a(1, new PathfinderGoalFloat(this));
+ this.goalSelector.a(1, new PathfinderGoalRabbitPanic(this, 1.33D));
+@@ -31,8 +37,8 @@
+ this.goalSelector.a(11, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 10.0F));
+ this.bk = new PathfinderGoalRabbitAvoidTarget(this, new EntitySelectorRabbitWolf(this), 16.0F, 1.33D, 1.33D);
+ this.goalSelector.a(4, this.bk);
+- this.b(0.0D);
+ }
++ // CraftBukkit end
+
+ protected float bD() {
+ return this.moveController.a() && this.moveController.e() > this.locY + 0.5D ? 0.5F : this.br.b(); \ No newline at end of file
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
index 62fc7ef2..f3a28ddd 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
@@ -1,9 +1,12 @@
package org.bukkit.craftbukkit.entity;
+import net.minecraft.server.World;
import net.minecraft.server.EntityRabbit;
+import net.minecraft.server.PathfinderGoalSelector;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Rabbit;
+import org.bukkit.craftbukkit.CraftWorld;
public class CraftRabbit extends CraftAnimals implements Rabbit {
@@ -12,12 +15,74 @@ public class CraftRabbit extends CraftAnimals implements Rabbit {
}
@Override
+ public EntityRabbit getHandle() {
+ return (EntityRabbit) entity;
+ }
+
+ @Override
public String toString() {
- return "CraftRabbit";
+ return "CraftRabbit{RabbitType=" + getRabbitType() + "}";
}
@Override
public EntityType getType() {
return EntityType.RABBIT;
}
+
+ @Override
+ public Type getRabbitType() {
+ int type = getHandle().cl();
+ return CraftMagicMapping.fromMagic(type);
+ }
+
+ @Override
+ public void setRabbitType(Type type) {
+ EntityRabbit entity = getHandle();
+ if (getRabbitType() == Type.THE_KILLER_BUNNY) {
+ // Reset goals and target finders.
+ World world = ((CraftWorld) this.getWorld()).getHandle();
+ entity.goalSelector = new PathfinderGoalSelector(world != null && world.methodProfiler != null ? world.methodProfiler : null);
+ entity.targetSelector = new PathfinderGoalSelector(world != null && world.methodProfiler != null ? world.methodProfiler : null);
+ entity.initializePathFinderGoals();
+ }
+
+ entity.r(CraftMagicMapping.toMagic(type)); // PAIL: Rename
+ }
+
+ private static class CraftMagicMapping {
+
+ private static final int[] types = new int[Type.values().length];
+ private static final Type[] reverse = new Type[Type.values().length];
+
+ static {
+ set(Type.BROWN, 0);
+ set(Type.WHITE, 1);
+ set(Type.BLACK, 2);
+ set(Type.BLACK_AND_WHITE, 3);
+ set(Type.GOLD, 4);
+ set(Type.SALT_AND_PEPPER, 5);
+ set(Type.THE_KILLER_BUNNY, 99);
+ }
+
+ private static void set(Type type, int value) {
+ types[type.ordinal()] = value;
+ if (value < reverse.length) {
+ reverse[value] = type;
+ }
+ }
+
+ public static Type fromMagic(int magic) {
+ if (magic > 0 && magic < reverse.length) {
+ return reverse[magic];
+ } else if (magic == 99) {
+ return Type.THE_KILLER_BUNNY;
+ } else {
+ return null;
+ }
+ }
+
+ public static int toMagic(Type type) {
+ return types[type.ordinal()];
+ }
+ }
}