| 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); |
| } |
| } |
| } |