blob: 70a6d50ed67140c8fba109657806eb53e5e11f0f [file] [log] [blame] [raw]
package net.glowstone.util;
import net.glowstone.constants.GlowAchievement;
import net.glowstone.constants.GlowStatistic;
import net.glowstone.net.message.play.game.StatisticMessage;
import org.apache.commons.lang.Validate;
import org.bukkit.Achievement;
import org.bukkit.Material;
import org.bukkit.Statistic;
import org.bukkit.entity.EntityType;
import java.util.HashMap;
import java.util.Map;
/**
* A container for achievement and statistic tracking.
*/
public final class StatisticMap {
private final Map<String, Integer> values = new HashMap<>();
public StatisticMap() {
}
public StatisticMessage toMessage() {
return new StatisticMessage(values);
}
////////////////////////////////////////////////////////////////////////////
// Helpers
private int getValue(String key) {
if (values.containsKey(key)) {
return values.get(key);
} else {
return 0;
}
}
private void setValue(String key, int value) {
values.put(key, value < 0 ? 0 : value);
}
private String name(Statistic stat) {
return GlowStatistic.getName(stat);
}
private String name(Statistic stat, Material mat) {
if (mat.isBlock()) {
Validate.isTrue(stat.getType() == Statistic.Type.BLOCK, "Statistic " + stat + " is not a block statistic");
} else {
Validate.isTrue(stat.getType() == Statistic.Type.ITEM, "Statistic " + stat + " is not an item statistic");
}
throw new UnsupportedOperationException("Not yet implemented");
}
private String name(Statistic stat, EntityType type) {
Validate.isTrue(stat.getType() == Statistic.Type.ENTITY, "Statistic " + stat + " is not an entity statistic");
throw new UnsupportedOperationException("Not yet implemented");
}
////////////////////////////////////////////////////////////////////////////
// Achievement and stat accessors
public boolean hasAchievement(Achievement achievement) {
return getValue(GlowAchievement.getName(achievement)) != 0;
}
public void setAchievement(Achievement achievement, boolean has) {
setValue(GlowAchievement.getName(achievement), has ? 1 : 0);
}
public int get(Statistic stat) {
return getValue(name(stat));
}
public int get(Statistic stat, Material material) {
return getValue(name(stat, material));
}
public int get(Statistic stat, EntityType entityType) {
return getValue(name(stat, entityType));
}
public void set(Statistic stat, int value) {
setValue(name(stat), value);
}
public void set(Statistic stat, Material material, int value) {
setValue(name(stat, material), value);
}
public void set(Statistic stat, EntityType entityType, int value) {
setValue(name(stat, entityType), value);
}
public void add(Statistic stat, int modify) {
final String name = name(stat);
setValue(name, getValue(name) + modify);
}
public void add(Statistic stat, Material material, int modify) {
final String name = name(stat, material);
setValue(name, getValue(name) + modify);
}
public void add(Statistic stat, EntityType entityType, int modify) {
final String name = name(stat, entityType);
setValue(name, getValue(name) + modify);
}
}