package modtweaker.mods.tconstruct.actions;
import minetweaker.IUndoableAction;
import modtweaker.brackets.util.IMaterial;
import slimeknights.tconstruct.library.materials.HandleMaterialStats;
import slimeknights.tconstruct.library.materials.IMaterialStats;
import slimeknights.tconstruct.library.materials.Material;
/**
* Created by Jared on 6/16/2016.
*/
public class SetModifierAction implements IUndoableAction {
private final IMaterial material;
private final String stat;
private final float newValue;
private final float oldValue;
public SetModifierAction(IMaterial material, String stat, float newValue) {
this.material = material;
this.stat = stat;
this.newValue = newValue;
this.oldValue = ((HandleMaterialStats) ((Material) material.getInternal()).getStats("handle")).modifier;
}
private static void set(Material material, String stat, float modifier) {
IMaterialStats oldStat = material.getStats(stat);
if (oldStat instanceof HandleMaterialStats) {
HandleMaterialStats handleStat = (HandleMaterialStats) oldStat;
HandleMaterialStats newHandle = new HandleMaterialStats(modifier, handleStat.durability);
material.addStats(newHandle);
}
}
@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 Modifier of " + material.getName() + " to " + newValue + " for " + stat;
}
@Override
public String describeUndo() {
return "Reverting Modifier of " + material.getName() + " to " + oldValue + " for " + stat;
}
@Override
public Object getOverrideKey() {
return null;
}
}