blob: 92269f7ebef84298ba37c0f19d591bf62bbed0c9 [file] [log] [blame] [raw]
package li.cil.oc.api.event;
import cpw.mods.fml.common.eventhandler.Cancelable;
import cpw.mods.fml.common.eventhandler.Event;
import li.cil.oc.api.driver.EnvironmentHost;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.HashMap;
import java.util.Map;
/**
* This event is fired by the geolyzer block/upgrade.
* <p/>
* When cancelling this event, the respective method will bail and report
* that the operation failed.
*/
@Cancelable
public abstract class GeolyzerEvent extends Event {
/**
* The container of the geolyzer component. This can either be the
* geolyzer block, or something with the geolyzer upgrade (a robot).
*/
public final EnvironmentHost host;
/**
* The options the operation was invoked with.
*/
public final Map<?, ?> options;
protected GeolyzerEvent(EnvironmentHost host, Map<?, ?> options) {
this.host = host;
this.options = options;
}
/**
* Long-distance scan, getting quantified information about blocks around
* the geolyzer. By default this will yield a (noisy) listing of the
* hardness of the blocks.
* <p/>
* Note: the y coordinate is computed as <tt>geolyzer.y - 32 + data.index</tt>.
*/
public static class Scan extends GeolyzerEvent {
/**
* The <em>relative</em> x coordinate of the column being scanned.
*/
public final int scanX;
/**
* The <em>relative</em> z coordinate of the column being scanned.
*/
public final int scanZ;
/**
* The data for the column of blocks being scanned, which is an
* interval around the geolyzer itself, with the geolyzer block
* being at index 32.
*/
public final float[] data = new float[64];
public Scan(EnvironmentHost host, Map<?, ?> options, int scanX, int scanZ) {
super(host, options);
this.scanX = scanX;
this.scanZ = scanZ;
}
}
/**
* Zero-range scan, getting in-depth information about blocks directly
* adjacent to the geolyzer. By default this will yield the block's
* name, metadata, hardness and harvest information.
*/
public static class Analyze extends GeolyzerEvent {
/**
* The side of the geolyzer on which the block to scan is located.
*/
public final ForgeDirection side;
/**
* The retrieved data for the block being scanned.
*/
public final Map<String, Object> data = new HashMap<String, Object>();
public Analyze(EnvironmentHost host, Map<?, ?> options, ForgeDirection side) {
super(host, options);
this.side = side;
}
}
}