91 lines
2.8 KiB
Java
91 lines
2.8 KiB
Java
/*
|
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
|
* Copyright Daniel Ratcliffe, 2011-2019. This API may be redistributed unmodified and in full only.
|
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
|
*/
|
|
package dan200.computercraft.api.turtle.event;
|
|
|
|
import dan200.computercraft.api.turtle.ITurtleAccess;
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import javax.annotation.Nonnull;
|
|
import javax.annotation.Nullable;
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* Fired when a turtle attempts to refuel from an item.
|
|
*
|
|
* One may use {@link #setCanceled(boolean, String)} to prevent refueling from this specific item. Additionally, you
|
|
* may use {@link #setHandler(Handler)} to register a custom fuel provider.
|
|
*/
|
|
public class TurtleRefuelEvent extends TurtleActionEvent
|
|
{
|
|
private final ItemStack stack;
|
|
private Handler handler;
|
|
|
|
public TurtleRefuelEvent( @Nonnull ITurtleAccess turtle, @Nonnull ItemStack stack )
|
|
{
|
|
super( turtle, TurtleAction.REFUEL );
|
|
|
|
Objects.requireNonNull( turtle, "turtle cannot be null" );
|
|
this.stack = stack;
|
|
}
|
|
|
|
/**
|
|
* Get the stack we are attempting to refuel from.
|
|
*
|
|
* Do not modify the returned stack - all modifications should be done within the {@link Handler}.
|
|
*
|
|
* @return The stack to refuel from.
|
|
*/
|
|
public ItemStack getStack()
|
|
{
|
|
return stack;
|
|
}
|
|
|
|
/**
|
|
* Get the refuel handler for this stack.
|
|
*
|
|
* @return The refuel handler, or {@code null} if none has currently been set.
|
|
* @see #setHandler(Handler)
|
|
*/
|
|
@Nullable
|
|
public Handler getHandler()
|
|
{
|
|
return handler;
|
|
}
|
|
|
|
/**
|
|
* Set the refuel handler for this stack.
|
|
*
|
|
* You should call this if you can actually refuel from this item, and ideally only if there are no existing
|
|
* handlers.
|
|
*
|
|
* @param handler The new refuel handler.
|
|
* @see #getHandler()
|
|
*/
|
|
public void setHandler( @Nullable Handler handler )
|
|
{
|
|
this.handler = handler;
|
|
}
|
|
|
|
/**
|
|
* Handles refuelling a turtle from a specific item.
|
|
*/
|
|
@FunctionalInterface
|
|
public interface Handler
|
|
{
|
|
/**
|
|
* Refuel a turtle using an item.
|
|
*
|
|
* @param turtle The turtle to refuel.
|
|
* @param stack The stack to refuel with.
|
|
* @param slot The slot the stack resides within. This may be used to modify the inventory afterwards.
|
|
* @param limit The maximum number of refuel operations to perform. This will often correspond to the number of
|
|
* items to consume.
|
|
* @return The amount of fuel gained.
|
|
*/
|
|
int refuel( @Nonnull ITurtleAccess turtle, @Nonnull ItemStack stack, int slot, int limit );
|
|
}
|
|
}
|