Apparently part of the craft table code checks to make sure there is actually a crafting table block in the world at the position called. Overriding that makes it work. Thanks Saxon564.
public class ItemMatrix extends Item
{
public ItemMatrix()
{
super();
setMaxDamage(0);
setMaxStackSize(1);
setCreativeTab(Symbology.symbologyTab);
setUnlocalizedName("rune_matrix");
}
public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn)
{
playerIn.displayGui(new ItemMatrix.InterfaceCraftingTable(worldIn, playerIn.getPosition()));
return itemStackIn;
}
public static class InterfaceCraftingTable extends BlockWorkbench.InterfaceCraftingTable implements IInteractionObject
{
private final World world;
private final BlockPos position;
public InterfaceCraftingTable(World worldIn, BlockPos pos)
{
super(worldIn, pos);
this.world = worldIn;
this.position = pos;
}
@Override
public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn)
{
return new ContainerMatrixCrafter(playerInventory, this.world, this.position);
}
}
}