blob: d907379ac37a91e6994145c87ac863e975f526bc [file] [log] [blame] [raw]
package li.cil.oc.api.event;
import li.cil.oc.api.internal.Agent;
import net.minecraft.item.ItemStack;
public class RobotUsedToolEvent extends RobotEvent {
/**
* The tool that was used, before and after use.
*/
public final ItemStack toolBeforeUse, toolAfterUse;
protected double damageRate;
protected RobotUsedToolEvent(Agent agent, ItemStack toolBeforeUse, ItemStack toolAfterUse, double damageRate) {
super(agent);
this.toolBeforeUse = toolBeforeUse;
this.toolAfterUse = toolAfterUse;
this.damageRate = damageRate;
}
/**
* The rate at which the used tool should lose durability, where one means
* it loses durability at full speed, zero means it doesn't lose durability
* at all.
* <p/>
* This value is in an interval of [0, 1].
*/
public double getDamageRate() {
return damageRate;
}
/**
* Fired when a robot used a tool and is about to apply the damage rate to
* partially undo the durability loss. This step is used to compute the
* rate at which the tool should lose durability, which is used by the
* experience upgrade, for example.
*/
public static class ComputeDamageRate extends RobotUsedToolEvent {
public ComputeDamageRate(Agent agent, ItemStack toolBeforeUse, ItemStack toolAfterUse, double damageRate) {
super(agent, toolBeforeUse, toolAfterUse, damageRate);
}
/**
* Set the rate at which the tool actually gets damaged.
* <p/>
* This will be clamped to an iterval of [0, 1].
*
* @param damageRate the new damage rate.
*/
public void setDamageRate(double damageRate) {
this.damageRate = Math.max(0, Math.min(1, damageRate));
}
}
/**
* Fired when a robot used a tool and the previously fired damage rate
* computation returned a value smaller than one. The callbacks of this
* method are responsible for applying the inverse damage the tool took.
* The <tt>toolAfterUse</tt> item stack represents the actual tool, any
* changes must be applied to that variable. The <tt>toolBeforeUse</tt>
* item stack is passed for reference, to compute the actual amount of
* durability that was lost. This may be required for tools where the
* durability is stored in the item's NBT tag.
*/
public static class ApplyDamageRate extends RobotUsedToolEvent {
public ApplyDamageRate(Agent agent, ItemStack toolBeforeUse, ItemStack toolAfterUse, double damageRate) {
super(agent, toolBeforeUse, toolAfterUse, damageRate);
}
}
}