CraftBukkit/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
2018-07-15 18:52:21 +10:00

118 lines
3.1 KiB
Java

package org.bukkit.craftbukkit.entity;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.server.EntityTropicalFish;
import org.bukkit.DyeColor;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.TropicalFish;
public class CraftTropicalFish extends CraftFish implements TropicalFish {
public CraftTropicalFish(CraftServer server, EntityTropicalFish entity) {
super(server, entity);
}
@Override
public EntityTropicalFish getHandle() {
return (EntityTropicalFish) entity;
}
@Override
public String toString() {
return "CraftTropicalFish";
}
@Override
public EntityType getType() {
return EntityType.TROPICAL_FISH;
}
@Override
public DyeColor getPatternColor() {
return getPatternColor(getHandle().getVariant());
}
@Override
public void setPatternColor(DyeColor color) {
getHandle().setVariant(getData(color, getBodyColor(), getPattern()));
}
@Override
public DyeColor getBodyColor() {
return getBodyColor(getHandle().getVariant());
}
@Override
public void setBodyColor(DyeColor color) {
getHandle().setVariant(getData(getPatternColor(), color, getPattern()));
}
@Override
public Pattern getPattern() {
return getPattern(getHandle().getVariant());
}
@Override
public void setPattern(Pattern pattern) {
getHandle().setVariant(getData(getPatternColor(), getBodyColor(), pattern));
}
public static enum CraftPattern {
KOB(0, false),
SUNSTREAK(1, false),
SNOOPER(2, false),
DASHER(3, false),
BRINELY(4, false),
SPOTTY(5, false),
FLOPPER(0, true),
STRIPEY(1, true),
GLITTER(2, true),
BLOCKFISH(3, true),
BETTY(4, true),
CLAYFISH(5, true);
private final int variant;
private final boolean large;
//
private static final Map<Integer, Pattern> BY_DATA = new HashMap<>();
static {
for (CraftPattern type : values()) {
BY_DATA.put(type.getDataValue(), Pattern.values()[type.ordinal()]);
}
}
public static Pattern fromData(int data) {
return BY_DATA.get(data);
}
private CraftPattern(int variant, boolean large) {
this.variant = variant;
this.large = large;
}
public int getDataValue() {
return variant << 8 | ((large) ? 1 : 0);
}
}
public static int getData(DyeColor patternColor, DyeColor bodyColor, Pattern type) {
return patternColor.getWoolData() << 24 | bodyColor.getWoolData() << 16 | CraftPattern.values()[type.ordinal()].getDataValue();
}
public static DyeColor getPatternColor(int data) {
return DyeColor.getByWoolData((byte) ((data >> 24) & 0xFF));
}
public static DyeColor getBodyColor(int data) {
return DyeColor.getByWoolData((byte) ((data >> 16) & 0xFF));
}
public static Pattern getPattern(int data) {
return CraftPattern.fromData(data & 0xFFFF);
}
}