MineLittlePony/src/client/java/com/minelittlepony/pony/data/PonyData.java

107 lines
2.8 KiB
Java

package com.minelittlepony.pony.data;
import net.minecraft.client.resources.data.IMetadataSection;
import com.google.common.base.MoreObjects;
import com.minelittlepony.model.anim.BasicEasingInterpolator;
import com.minelittlepony.model.anim.IInterpolator;
import java.awt.image.BufferedImage;
import java.util.UUID;
import javax.annotation.concurrent.Immutable;
/**
* Implementation for IPonyData.
*
*/
@Immutable
public class PonyData implements IPonyData, IMetadataSection {
private final PonyRace race;
private final TailLengths tailSize;
private final PonyGender gender;
private final PonySize size;
private final int glowColor;
private final boolean[] wearables;
public PonyData() {
race = PonyRace.HUMAN;
tailSize = TailLengths.FULL;
gender = PonyGender.MARE;
size = PonySize.NORMAL;
glowColor = 0x4444aa;
wearables = new boolean[PonyWearable.values().length];
}
private PonyData(BufferedImage image) {
race = TriggerPixels.RACE.readValue(image);
tailSize = TriggerPixels.TAIL.readValue(image);
size = TriggerPixels.SIZE.readValue(image);
gender = TriggerPixels.GENDER.readValue(image);
glowColor = TriggerPixels.GLOW.readColor(image);
wearables = TriggerPixels.WEARABLES.readFlags(image);
}
@Override
public PonyRace getRace() {
return race;
}
@Override
public TailLengths getTail() {
return tailSize;
}
@Override
public PonyGender getGender() {
return gender;
}
@Override
public PonySize getSize() {
return size.getEffectiveSize();
}
@Override
public int getGlowColor() {
return glowColor;
}
@Override
public boolean hasMagic() {
return getRace() != null && getRace().getEffectiveRace(false).hasHorn() && getGlowColor() != 0;
}
@Override
public boolean isWearing(PonyWearable wearable) {
return wearables[wearable.ordinal()];
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("race", race)
.add("tailSize", tailSize)
.add("gender", gender)
.add("size", size)
.add("wearables", PonyWearable.flags(wearables))
.add("glowColor", "#" + Integer.toHexString(glowColor))
.toString();
}
@Override
public IInterpolator getInterpolator(UUID interpolatorId) {
return BasicEasingInterpolator.getInstance(interpolatorId);
}
/**
* Parses an image buffer into a new IPonyData representing the values stored in it's individual trigger pixels.
*/
public static IPonyData parse(BufferedImage image) {
return new PonyData(image);
}
}