package joshie.progression.criteria.rewards; import joshie.progression.Progression; import joshie.progression.api.criteria.ICriteria; import joshie.progression.api.criteria.ProgressionRule; import joshie.progression.api.special.*; import joshie.progression.handlers.APICache; import joshie.progression.player.PlayerTracker; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.StringUtils; import java.util.List; import static joshie.progression.api.special.DisplayMode.EDIT; import static net.minecraft.util.text.TextFormatting.GREEN; import static net.minecraft.util.text.TextFormatting.RED; @ProgressionRule(name="criteria", color=0xFF99B3FF, meta="clearOrReceiveOrBlockCriteria") public class RewardCriteria extends RewardBaseSingular implements IInit, ICustomDescription, ICustomTooltip, ICustomWidth, IGetterCallback { private ICriteria criteria = null; public boolean remove = true; public boolean possibility = false; public String displayName = ""; public String description = ""; public int displayWidth = 100; @Override public void init(boolean isClient) { try { for (ICriteria c : APICache.getCache(isClient).getCriteriaSet()) { if (c.getLocalisedName().equals(displayName)) { criteria = c; break; } } } catch (Exception e) {} } @Override public int getWidth(DisplayMode mode) { return mode == EDIT ? 100 : displayWidth; } @Override public String getDescription() { if (!StringUtils.isNullOrEmpty(description)) { return description; } if (criteria != null) { StringBuilder builder = new StringBuilder(); if (remove) builder.append(Progression.format(getProvider().getUnlocalisedName() + ".remove.description", criteria.getLocalisedName())); else builder.append(Progression.format(getProvider().getUnlocalisedName() + ".add.description", criteria.getLocalisedName())); if (possibility) { builder.append("\n"); builder.append(Progression.format(getProvider().getUnlocalisedName() + ".possibility.description", criteria.getLocalisedName())); } return builder.toString(); } return Progression.translate(getProvider().getUnlocalisedName() + ".incorrect"); } @Override public void addTooltip(List list) { if (criteria != null) { if (remove) { list.add(Progression.translate("remove") + " " + criteria.getLocalisedName()); } else list.add(Progression.translate("add") + " " + criteria.getLocalisedName()); } } @Override public String getField(String fieldName) { if (fieldName.equals("displayName")) return criteria != null ? GREEN + displayName : RED + displayName; if (fieldName.equals("displayWidth")) return displayWidth + ""; else return description; } @Override public void reward(EntityPlayerMP player) { if (criteria == null) return; //Do not give the reward if (remove) { PlayerTracker.getServerPlayer(player).getMappings().forceRemoval(criteria); } else PlayerTracker.getServerPlayer(player).getMappings().forceComplete(criteria); if (possibility) { PlayerTracker.getServerPlayer(player).getMappings().switchPossibility(criteria); } } }