package modtweaker.mods.tconstruct.actions; import minetweaker.IUndoableAction; import modtweaker.brackets.util.IMaterial; import slimeknights.tconstruct.library.materials.*; /** * Created by Jared on 6/16/2016. */ public class SetDurabilityAction implements IUndoableAction { private final IMaterial material; private final String stat; private final int newValue; private final int oldValue; public SetDurabilityAction(IMaterial material, String stat, int newValue) { this.material = material; this.stat = stat; this.newValue = newValue; this.oldValue = ((HeadMaterialStats) ((Material) material.getInternal()).getStats("head")).durability; } private static void set(Material material, String stat, int durability) { IMaterialStats oldStat = material.getStats(stat); if (oldStat instanceof HeadMaterialStats) { HeadMaterialStats headStat = (HeadMaterialStats) oldStat; HeadMaterialStats newHead = new HeadMaterialStats(durability, headStat.miningspeed, headStat.attack, headStat.harvestLevel); material.addStats(newHead); } else if (oldStat instanceof HandleMaterialStats) { HandleMaterialStats handleStat = (HandleMaterialStats) oldStat; HandleMaterialStats newHandle = new HandleMaterialStats(handleStat.modifier, durability); material.addStats(newHandle); } else if (oldStat instanceof ExtraMaterialStats) { ExtraMaterialStats newExtra = new ExtraMaterialStats(durability); material.addStats(newExtra); } } @Override public void apply() { set((Material) material.getInternal(), stat, newValue); } @Override public boolean canUndo() { return true; } @Override public void undo() { set((Material) material.getInternal(),stat, oldValue); } @Override public String describe() { return "Setting durability of " + material.getName() + " to " + newValue + " for " + stat; } @Override public String describeUndo() { return "Reverting durability of " + material.getName() + " to " + oldValue + " for " + stat; } @Override public Object getOverrideKey() { return null; } }