All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.craftbukkit.entity.CraftRabbit Maven / Gradle / Ivy

package org.bukkit.craftbukkit.entity;

import net.minecraft.server.EntityRabbit;
import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Rabbit;

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()];
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy