89 lines
2.7 KiB
Java
89 lines
2.7 KiB
Java
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 {
|
|
|
|
public CraftRabbit(CraftServer server, EntityRabbit entity) {
|
|
super(server, entity);
|
|
}
|
|
|
|
@Override
|
|
public EntityRabbit getHandle() {
|
|
return (EntityRabbit) entity;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "CraftRabbit{RabbitType=" + getRabbitType() + "}";
|
|
}
|
|
|
|
@Override
|
|
public EntityType getType() {
|
|
return EntityType.RABBIT;
|
|
}
|
|
|
|
@Override
|
|
public Type getRabbitType() {
|
|
int type = getHandle().getRabbitType();
|
|
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.setRabbitType(CraftMagicMapping.toMagic(type));
|
|
}
|
|
|
|
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()];
|
|
}
|
|
}
|
|
}
|