1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2024-06-23 13:43:22 +00:00
CC-Tweaked/src/main/java/dan200/computercraft/shared/turtle/core/TurtleToolCommand.java
2019-01-01 01:10:18 +00:00

76 lines
2.5 KiB
Java

/*
* This file is part of ComputerCraft - http://www.computercraft.info
* Copyright Daniel Ratcliffe, 2011-2019. Do not distribute without permission.
* Send enquiries to dratcliffe@gmail.com
*/
package dan200.computercraft.shared.turtle.core;
import dan200.computercraft.api.turtle.*;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Locale;
public class TurtleToolCommand implements ITurtleCommand
{
private final TurtleVerb verb;
private final InteractDirection direction;
private final TurtleSide side;
public TurtleToolCommand( TurtleVerb verb, InteractDirection direction, TurtleSide side )
{
this.verb = verb;
this.direction = direction;
this.side = side;
}
@Nonnull
@Override
public TurtleCommandResult execute( @Nonnull ITurtleAccess turtle )
{
TurtleCommandResult firstFailure = null;
for( TurtleSide side : TurtleSide.values() )
{
if( this.side != null && this.side != side ) continue;
ITurtleUpgrade upgrade = turtle.getUpgrade( side );
if( upgrade == null || !upgrade.getType().isTool() ) continue;
TurtleCommandResult result = upgrade.useTool( turtle, side, verb, direction.toWorldDir( turtle ) );
if( result.isSuccess() )
{
switch( side )
{
case Left:
turtle.playAnimation( TurtleAnimation.SwingLeftTool );
break;
case Right:
turtle.playAnimation( TurtleAnimation.SwingRightTool );
break;
default:
turtle.playAnimation( TurtleAnimation.Wait );
break;
}
return result;
}
else if( firstFailure == null )
{
firstFailure = result;
}
}
return firstFailure != null ? firstFailure
: TurtleCommandResult.failure( "No tool to " + verb.name().toLowerCase( Locale.ROOT ) + " with" );
}
public static TurtleToolCommand attack( InteractDirection direction, @Nullable TurtleSide side )
{
return new TurtleToolCommand( TurtleVerb.Attack, direction, side );
}
public static TurtleToolCommand dig( InteractDirection direction, @Nullable TurtleSide side )
{
return new TurtleToolCommand( TurtleVerb.Dig, direction, side );
}
}