package joshie.progression.criteria.triggers;
import joshie.progression.api.ProgressionAPI;
import joshie.progression.api.criteria.IField;
import joshie.progression.api.criteria.ITrigger;
import joshie.progression.api.criteria.ProgressionRule;
import joshie.progression.api.special.*;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.Achievement;
import net.minecraft.stats.AchievementList;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.translation.I18n;
import net.minecraftforge.event.entity.player.AchievementEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.apache.commons.lang3.text.WordUtils;
import java.util.List;
@ProgressionRule(name="achievement", color=0xFF00D9D9, meta="onReceivedAchiement")
public class TriggerAchievement extends TriggerBaseBoolean implements IInit, ICustomWidth, ISpecialFieldProvider, IItemGetterCallback, IAdditionalTooltip<ItemStack> {
public String id = "openInventory";
private transient Achievement achievement;
@Override
public ITrigger copy() {
TriggerAchievement trigger = new TriggerAchievement();
trigger.id = id;
return copyBoolean(trigger);
}
@Override
public void init(boolean isClient) {
for (Achievement a: AchievementList.ACHIEVEMENTS) {
if (a.statId.equals("achievement." + id)) {
achievement = a;
break;
}
}
}
@Override
public int getWidth(DisplayMode mode) {
return mode == DisplayMode.EDIT ? 100 : 70;
}
@Override
public void addSpecialFields(List<IField> fields, DisplayMode mode) {
if (mode == DisplayMode.DISPLAY) fields.add(ProgressionAPI.fields.getItem(this, "id", 20, 42, 2F));
}
@Override
public ItemStack getItem(String fieldName) {
return achievement != null ? achievement.theItemStack : new ItemStack(Items.GOLDEN_HOE);
}
@Override
public void addHoverTooltip(String field, ItemStack stack, List<String> tooltip) {
tooltip.clear();
if (achievement != null) {
tooltip.add(TextFormatting.DARK_AQUA + I18n.translateToLocal(achievement.statId));
String[] split = WordUtils.wrap(achievement.getDescription() + ".", 27).split("\n");
for (String s: split) {
tooltip.add(s.trim());
}
}
}
@SubscribeEvent
public void onAchievementGet(AchievementEvent event) {
ProgressionAPI.registry.fireTrigger(event.getEntityPlayer(), getProvider().getUnlocalisedName(), event.getAchievement());
}
@Override
protected boolean isTrue(Object... data) {
return ((Achievement) data[0]).statId.equals("achievement." + id);
}
}