package joshie.progression.criteria.conditions; import joshie.progression.api.IPlayerTeam; import joshie.progression.api.ProgressionAPI; import joshie.progression.api.criteria.IField; import joshie.progression.api.criteria.ProgressionRule; import joshie.progression.api.special.*; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; 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 org.apache.commons.lang3.text.WordUtils; import java.util.List; @ProgressionRule(name="achievement", color=0xFFFFFF00, meta="ifHasAchievement") public class ConditionAchievement extends ConditionBase implements IInit, ICustomWidth, ISpecialFieldProvider, IItemGetterCallback, IAdditionalTooltip<ItemStack> { public String id = "mineWood"; private transient Achievement achievement; @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 : 92; } @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()); } } } @Override public boolean isSatisfied(IPlayerTeam team) { if (achievement != null) { for (EntityPlayer player: team.getTeamEntities()) { //If any team member has the achievement if (player.worldObj.isRemote && ((EntityPlayerSP)player).getStatFileWriter().hasAchievementUnlocked(achievement)) return true; else if (!player.worldObj.isRemote && ((EntityPlayerMP)player).getStatFile().hasAchievementUnlocked(achievement)) return true; } } return false; } }