/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.blocks.signals;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import mods.railcraft.api.signals.SignalAspect;
import net.minecraft.tileentity.TileEntity;
public abstract class TileBoxBase extends TileSignalFoundation {
private static final float BOUND = 0.1f;
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int i, int j, int k) {
getBlockType().setBlockBounds(BOUND, 0, BOUND, 1 - BOUND, 1 - BOUND / 2, 1 - BOUND);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k) {
return AxisAlignedBB.getBoundingBox(i + BOUND, j, k + BOUND, i + 1 - BOUND, j + 1 - BOUND / 2, k + 1 - BOUND);
}
@Override
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int i, int j, int k) {
return AxisAlignedBB.getBoundingBox(i + BOUND, j, k + BOUND, i + 1 - BOUND, j + 1 - BOUND / 2, k + 1 - BOUND);
}
@Override
public boolean canUpdate() {
return true;
}
public abstract boolean isConnected(ForgeDirection side);
public abstract SignalAspect getBoxSignalAspect(ForgeDirection side);
public boolean canTransferAspect() {
return false;
}
public boolean canReceiveAspect() {
return false;
}
public void onNeighborStateChange(TileBoxBase neighbor, ForgeDirection side) {
}
public final void updateNeighborBoxes() {
for (int side = 2; side < 6; side++) {
ForgeDirection forgeSide = ForgeDirection.getOrientation(side);
TileEntity tile = tileCache.getTileOnSide(forgeSide);
if (tile instanceof TileBoxBase) {
TileBoxBase box = (TileBoxBase) tile;
box.onNeighborStateChange(this, forgeSide);
}
}
}
public boolean isEmittingRedstone(ForgeDirection side) {
return false;
}
public boolean canEmitRedstone(ForgeDirection side) {
return false;
}
@Override
public boolean isSideSolid(IBlockAccess world, int i, int j, int k, ForgeDirection side) {
if (side == ForgeDirection.UP)
return true;
return false;
}
@Override
public boolean canConnectRedstone(int dir) {
return true;
}
}